: 단일행 함수와 다중행 함수로 나뉜다.
처리하는 데이터 형식에 따라서 문자형, 숫자형, 날짜형, 변환형, NULL 관련 함수
[42] 날짜형 함수
SELECT TO_CHAR(TO_DATE('2015.01.10.10', 'YYY.MM.DD HH24) + 1/24/(60/10),
'YYYY.MM.DD HH24:MI:SS') FROM DUAL;
오라클에서 날짜의 연산은 숫자의 연산과 같다.
1/24/60
= 1분
2015년 1월 10일 10시 + 10분 = 2015년 1월 10일 10시 10분
DUAL 테이블이란
SELECT~ FROM~ 의 형식을 갖추기 위한 일종의 DUMMY 테이블이다.
DUMMY 라는 문자열 유형의 컬럼에 X라는 값이 들어 있는 행을 1건 포함하고 있다.
CONCAT(문자열1, 문자열2) = 문자열1과 문자열 2를 연결
// Oracle 함수
EXTRACT(YEAR FROM HIREDATE)
TO_NUMBER(TO_CHAR(HIREDATE,'YYYY'))
// SQL Server 함수
DATEPART(YEAR, HIREDATE)
YEAR(HIREDATE)
Oracle과 SQL의 차이
// Oracle 함수
SELECT EXTRACT(YEAR FROM HIREDATE) 입사년,
EXTRACT(MONTH FROM HIREDATE) 입사월,
EXTRACT(DAY FROM HIREDATE) 입사일
FROM EMP;
// Oracle 함수
SELECT ENAME, HIREDATE, TO_NUMBER(TO_CHAR(HIREDATE,'YYYY')) 입사년도,
TO_NUMBER(TO_CHAR(HIREDATE,'MM')) 입사월,
TO_NUMBER(TO_CHAR(HIREDATE,'DD')) 입사일
FROM EMP;
// SQL Server 함수
SELECT ENAME, HIREDATE, DATEPART(YEAR, HIREDATE) 입사년도,
DATEPART(MONTH, HIREDATE) 입사월,
DATEPART(DAY, HIREDATE) 입사일
FROM EMP;
// SQL Server 함수
SELECT ENAME, HIREDATE, YEAR(HIREDATE) 입사년도,
MONTH(HIREDATE) 입사월,
DAY(HIREDATE) 입사일
FROM EMP;
SIMPLE_CASE_EXPRESSION
CASE
SIMPLE_CASE_EXPRESSION 조건
ELSE 표현절
END
SEARCHED_CASE_EXPRESSION
: CASE 다음에 칼럼이나 표현식 없음
CASE
SEARCHED_CASE_EXPRESSION 조건
ELSE 표현절
END
[43번] CASE 표현
SIMPLE_CASE_EXPRESSION
SELECT LOC, CASE LOC
WHEN 'NEW YORK' THEN 'EAST'
ELSE 'ETC' END as AREA
FROM DEPT;
SEARCHED_CASE_EXPRESSION
SELECT LOC,
CASE WHEN LOC = 'NEW YORK' THEN 'EAST'
ELSE 'ETC'
END as AREA
FROM DEPT;
[55번] ORDER BY에 CASE 표현 중첩
// ID가 999이면 0으로 치환된다.
// 따라서 가장 먼저 정렬하고 나머지는 ID값으로 정렬한다.
ORDER BY (CASE WHEN ID = 999 THEN 0 ELSE ID END)
[58번] ORDER BY에 CASE 표현 중첩
// ID가 A이면 1로 치환되어 가장 먼저 정렬한다.
// 나머지 ID는 AMT값으로 내림차순 정렬한다.
SELECT ID, AMT
FROM TBL
ORDER BY (CASE WHEN ID = 'A' THEN 1 ELSE 2 END),
AMT DESC
// Oracle 함수 vs SQL Server 함수
// 표현식1이 NULL이면 표현식2 출력
NVL(표현식1, 표현식2)
ISNULL(표현식1, 표현식2)
// 표현식1 = 표현식2이면 NULL, 아니면 표현식1
NULLIF(표현식1, 표현식2)
// NULL이 아닌 최초의 표현식
COALESCE(표현식1, 표현식2, ...)
공집합과 NULL은 다르다.
NULL은 아직 정의되지 않은 값으로, 0(숫자) 또는 공백(문자)과 다르다.