DBMS/Oracle
D+26 [06.SQL 함수]
구일일구
2022. 8. 29. 17:53
반응형
06. SQL 함수
SQL*PLUS : 콘솔창에서 하는 거 : 필요X
DUAL 테이블과 SQL 함수 분류
DUAL 테이블
* 한 행으로 결과를 출력하기 위해선 DUAL 테이블을 이용함
오라클 프롬프트에 24*60*60을 입력하면 오류 발생. SQL 문이 아니기 때문
따라서 출력하기 위해 테이블을 이용함
* DEPT 테이블 자체가 4줄짜리 테이블이기 때문에 결과식이 4개나 나옴.
* 그래서 DUAL 테이블은 산술 연산이나 가상 칼럼 등의 값을 한번만 출력하고 싶을 때 많이 사용하는 유용한 테이블.
DUMMY라는 한 개의 칼럼으로 구성되어 있다.
* DESC DUAL: VARCHAR2(1)
DUMMY칼럼에는 한 개의 문자만을 저장할 수 있는데 X라는 값을 가진 단 하나의 로우만을 저장하고 있다.
단일행 함수와 그룹함수로 SQL 함수 분류
단일행 함수 : 여러개의 행에 대해 단일행 함수의 결과는 여러개로 구해짐
그룹 함수 : 여러개의 행에 대해서 그룹함수의 결과는 1개의 행으로 구해짐
그룹 함수
구분 | 설명 |
SUM | 그룹의 누적 합계를 반환 |
AVG | 그룹의 평균을 반환 |
COUNT | 그룹의 총 개수를 반환 |
MAX | 그룹의 최대값 반환 |
MIN | 그룹의 최소값 반환 |
STDDEV | 그룹의 표준편차를 반환 |
VARIANCE | 그룹의 분산을 반환 |
단일행함수(1)문자 함수
구분 | 설명 |
LOWER | 소문자로 변환 |
UPPER | 대문자로 변환 |
INITCAP | 첫 글자만 대문자로 나머지 글자는 소문자로 변환 |
CONCAT | 문자의 값을 연결 |
SUBSTR | 문자를 잘라 추출 (한글 1Byte) |
SUBSTRB | 문자를 잘라 추출 (한글 2Byte) |
LENGTH | 문자의 길이 반환 (한글 1Byte) |
LENGTHB | 문자의 길이 반환 (한글 2Byte) |
INSTR | 특정 문자의 위치 값을 반환 (한글 1Byte) |
INSTRB | 특정 문자의 위치 값을 반환 (한글 2Byte) |
LPAD, RPAD | 입력 받은 문자열과 기호를 정렬하여 특정 길이 문자열로 반환 |
TRIM | 잘라내고 남은 문자를 표시 |
CONVERT | CHAR SET을 변환 |
CHR | ASCII 코드 값으로 변환 |
ASCII | ASCII 코드 값을 문자로 변환 |
REPLACE | 문자열에서 특정 문자를 변경 |
더보기
SUBSTRB 함수는 한글의 경우 문자 단위로 자를 때 깨지는 경우가 있음.
오라클 세팅에 따라서 한글이 3byte 또는 2 btye 일수 있으니 아래의 문자셋 쿼리로 오라클 세팅을 확인 후 사용하면
깨지는걸 막을 수 있음
SUBSTRB("문자열", "시작위치", "길이") |
1
2
3
4
|
-- 오라클 문자셋 확인 쿼리
SELECT *
FROM nls_database_parameters
WHERE parameter LIKE '%CHARACTERSET%'
|
단행함수(2) 숫자함수
구분 | 설명 |
ABS | 절대값 반환 |
COS | 코사인값 반환 |
EXP | e(2.71828183...)의 n승을 반환 |
FLOOR | 소수점 아래 잘라냄(버림) |
LOG | 로그값 반환 |
POWER | POWER(m, n) : m의 n승을 반환 |
SIGN | SIGN(n) : n<0이면 -1 / n=0이면 0 / n>0이면 1 반환 |
SIN | 사인값 반환 |
TAN | 탄젠트값 반환 |
ROUND | 특정 자리수에서 반올림 |
TRUNC | 특정 자리수에서 잘라냄 |
MOD | 입력 받은 수를 나눈 나머지값을 반환 |
단행함수(3) 날짜함수
구분 | 설명 |
SYSDATE | 시스템 저장된 현재 날짜를 반환 |
MONTHS_BETWEEN(DATE1, DATE2) | 두 날짜 사이가 몇 개월인지 반환 |
ADD_MONTHS(DATE1, 더할 개월수) | 특정 날짜에 개월 수 더하기 |
NEXT_DAY(DATE1, 요일) | 특정 날짜를 기준으로, 가장 빨리 다가오는 요일에 해당되는 날짜를 반환 |
LAST_DAY | 해당 달의 마지막 날짜 반환 |
ROUND | 인자로 받은 날짜를 특정 기준으로 반올림 |
TRUNC | 인자로 받은 날짜를 특정 기준으로 버림 |
단행함수(4) 변환함수
구분 | 설명 |
TO_CHAR | 날짜형 혹은 숫자형을 문자형으로 변환 |
TO_DATE | 문자형을 날짜형으로 변환 |
TO_NUMBER | 문자형을 숫자형으로 변환 |
TO_CHAR : 날짜형 혹은 숫자형을 문자형으로 변환
TO_CHAR(날짜 데이터, '출력 형식') |
날짜 출력 형식의 종류
종류 | 의미 |
YYYY | 년도 표시 (4자리) |
YY | 년도 표시 (2자리) |
MM | 월을 숫자로 표시 |
MON | 월을 알파벳으로 표시 |
DD | 일 표시 |
DAY | 요일 표시 |
DY | 요일을 약어로 표시 |
시간 출력 형식의 종류
종류 | 의미 |
AM 또는 PM | 오전(AM), 오후(PM) 시각 표시 |
A.M 또는 P.M | 오전(A.M), 오후(P.M) 시각 표시 |
HH 또는 HH12 | 시간 (1 ~ 12) |
HH24 | 시간 (0 ~ 23) |
MI | 분 표시 |
SS | 초 표시 |
숫자 출력 형식 표
구분 | 설명 |
0 | 자릿수를 나타냄. 자릿수가 맞지 않을 경우 0으로 채움 |
9 | 자릿수를 나타냄. 자릿수가 맞지 않아도 채우지 않음 |
L | 각 지역별 통화 기호를 앞에 표시함 |
. | 소수점 |
, | 천 단위 자리 구분 |
숫자 출력 예시
숫자 | 형식 | 결과 |
12345.67 | 999,999.999 | 12,345.67 |
12345.67 | 999999 | 12345 |
12345.67 | $999,999.99 | $12,345.67 |
12345.67 | L999,999.99 | ₩12,345.67 |
12345.67 | S999,999.99 | +12,345.67 |
일반 함수
구분 | 설명 |
NVL | 첫번째 인자 값이 NULL이면 두번째 인자값으로 변경 |
DECODE | 첫번째 인자 값을 조건에 맞춰 변경 (if와 유사) |
CASE | 조건에 맞는 문장을 수행 (switch와 유사) |
NVL(인자값1, 인자값2) ➡️ 인자값1이 null이면 인자값2로 변경
DECODE (표현식, 조건1, 결과1,
조건2, 결과2,
조건3, 결과3,
기본결과n)
CASE 표현식 WHEN 조건1 THEN 결과1
WHEN 조건2 THEN 결과2
WHEN 조건3 THEN 결과3
ELSE 결과n
END
Case then 뒤에서 end 뒤에 무언가를 붙이는건 별칭 붙이는거임
반응형