모든 함수를 외우지는 말고 필요한 함수를 그 때 그 때 찾아서 사용하면 된다.
자주 사용되는 함수들은 외울 수 있도록 한다.
- 형 변환 함수
- NULL 처리 함수
- 선택 함수
- 그룹 함수
다음은 형 변환 함수를 정리해 놓은 것이다. 주의 사항은 날짜는 숫자로 변환할 수 없다.
문자열로 변환하며 변환 시 포맷 형식을 지정해줘야 한다.
포맷에 포함되지 않는 글자는 쌍따옴표 내부에 작성해야 한다. 예를 들어 한글은 포맷에 포함되지 않으므로 쌍따옴표 내부에 작성하고 괄호는 포맷에 포함되므로 쌍따옴표를 작성하지 않아도 된다.
숫자를 문자열로 바꿀 때 칸 수가 충분하지 않으면 # 으로 채워진다.
다음은 포맷 형식이다.
지정된 포맷의 날짜 형식으로 해석하여 날짜형 데이터로 변환한다.
날짜 패턴 Y 와 R 의 차이점 역시 중요하므로 기억해둬야 한다.
-- 년도를 짧게 해석하는 경우
-- 50 미만 : 둘 다 앞부분에 현재 세기 (21C == 2000년대) 적용
-- 50 이상 : Y == 현재 세기 (2000년대) R == 이전 세기 (1900년대)
-- 1949-01-15
-- 1950-01-15
SELECT TO_DATE('490115', 'YYMMDD'), -- 2049-01-15 00:00:00
TO_DATE('490115', 'RRMMDD'), -- 2049-01-15 00:00:00
TO_DATE('500115', 'YYMMDD'), -- 2050-01-15 00:00:00
TO_DATE('500115', 'RRMMDD') -- 1950-01-15 00:00:00
FROM DUAL;
문자형 데이터를 숫자형 데이터로 변환하여 반환한다.
SELECT TO_NUMBER('1,000,000', '99,999,999') - TO_NUMBER('550,000', '999,999')
FROM DUAL; -- 450000 출력
NULL 값이 있으면 지정한 숫자나 문자로 변경하여 반환한다.
NVL 2 함수 NVL2 (컬럼명, NULL 아닌 경우 값, NULL 인 경우 값)
는 다음과 같이 사용될 수 있다.
-- 기존에 보너스를 받았던 사원은 기존 보너스에 0.2 추가
SELECT EMP_NAME, BONUS, NVL2(BONUS, BONUS + 0.2, 0.3) "변경된 BONUS"
FROM EMPLOYEE;
여러 가지 경우에 따라 알맞은 결과를 선택하는 함수로 if 문 또는 switch 문과 비슷하다.
DECODE 는 계산식 또는 컬럼값이 딱 떨어지는 경우에만 사용 가능하다.
CASE 는 계산식 또는 컬럼값을 범위로 정할 수 있다.
그룹 함수는 하나의 행으로 결과가 출력된다.
컬럼 값들의 합계를 반환한다.
컬럼 값들의 평균을 반환한다.
타입에 제한이 없다. 숫자는 대소를 비교하며 문자는 문자 순서를 비교한다.
날짜는 과거와 미래를 비교하는데 미래로 갈수록 숫자가 커진다는 점을 기억해야 한다.
COUNT(*)
은 NULL 을 포함한 모든 행의 개수를 반환한다.
COUNT(컬럼명)
은 NULL 을 제외한 행의 개수를 반환한다.
COUNT(DISTINCT 컬럼명)
은 중복된 값을 제외한 행의 개수를 반환한다.