함수명 | 의미 | 결과(리턴값) |
---|---|---|
SYSDATE | 시스템의 현재 날짜와 시간 | 날짜 |
MONTHS_BETWEEN | 두 날짜 사이의 개월 수 | 숫자 |
ADD_MONTHS | 주어진 날짜에 개월을 더함 | 날짜 |
NEXT_DAY | 주어진 날짜를 기준으로 돌아오는 날짜 출력 | 날짜 |
LAST_DAY | 주어진 날짜가 속한 달의 마지막 날짜 출력 | 날짜 |
ROUND | 주어진 날짜를 반올림 (오전오후 구분할때..) | 날짜 |
TRUNC | 주어진 날짜를 버림(연초, 월초 ...) | 날짜 |
ex. MONTHS_BETWEEN은 큰 날짜를 먼저 써야 양수값이 나옴
SELECT SYSDATE, MONTHS_BETWEEN('23/04/10', '23/04/01'),
MONTHS_BETWEEN('2023-04-10', '2023-04-01')
FROM dual;
결과
ex. 이번달 첫날, 이번달 마지막날, 저번달 마지막날, 다음달 첫날 구하기
SELECT LAST_DAY(SYSDATE) + 1 "다음달 첫날"
FROM dual;
SELECT TRUNC(SYSDATE, 'MM') "이번달 첫날"
FROM dual;
SELECT LAST_DAY(SYSDATE) "이번달 마지막날"
FROM dual;
SELECT TRUNC(SYSDATE, 'MM') - 1 "저번달 마지막날"
FROM dual;
데이터타입 | 설명 |
---|---|
CHAR(n) | 고정길이의 문자를 저장, 최대값은 2000 bytes |
VARCHAR2(n) | 변하는 길이의 문자를 저장, 최대값은 4000 bytes |
NUMBER(p,s) | 숫자 값을 저장, p는 전체 자리수로 1-38 자리까지, 소수점 이하 자리수로 -84 ~ 127 자리까지 가능 |
DATE | 총 7Byte로 BC 4712년 1월 1일부터 AD 9999년 12월 31일까지의 날짜를 저장할 수 있음 |
형식
SELECT TO_CHAR(SYSDATE , ‘원하는 모양’)
FROM dual
종류 | 의미 | 사용예 | 결과 |
---|---|---|---|
9 | 9의 개수만큼 자리수 | TO_CHAR(1234,’99999’) | 1234 |
0 | 빈자리를 0으로 채움 | TO_CHAR(1234,’099999’) | 001234 |
$ | $ 표시를 붙여서 표시 | TO_CHAR(1234,’$9999’) | $1234 |
. | 소수점 이하를 표시 | TO_CHAR(1234,’9999.99’) | 1234.00 |
, | 천 단위 구분기호를 표시 | TO_CHAR(12345,’99,999’) | 12,345 |
ex.
SELECT empno, ename, TO_CHAR((sal*12)+comm, '999,999') AS "SALARY"
FROM emp
WHERE ename='ALLEN';
EX.
SELECT SYSDATE, TO_CHAR(SYSDATE), TO_CHAR(SYSDATE, 'YYYY-MM-DD'), TO_CHAR(SYSDATE, 'YYYYMMDD'), TO_CHAR(SYSDATE, 'YYYY-MM-DD HH:MI:SS')
FROM dual;
결과
형식
NVL(컬럼, 치환할 값)
형식
NVL2(col1, col2, col3)
--col1값이 null이 아니면 col2, null이면 col3
:값의 일치를 비교 (=) 인 경우에만 사용!
ex. 마지막 null은 생략가능
--A 가 B 일 경우 ‘1’ 을 출력하는 경우
DECODE(A, B, '1', null)
--A 가 B 일 경우 ‘1’ 을 출력하고 A 가 C 일 경우 ‘2’ 를 출력하고 둘 다 아닐 경우 ‘3’ 을 출력하는 경우
DECODE (A , B , ‘1’ , C , ‘2’ , ’3’)
--A가 B인 경우 중에서 C가 D를 만족하면 1을 출력, 아닐 경우 null을 출력 (중첩)
DECODE (A , B , DECODE( C , D , ‘1’ , null))
--A 가 B 일 경우 중에서 C 가 D 를 만족하면 ‘1’을 출력하고 C 가 D가 아닐 경우 ‘2’ 를 출력하기
DECODE (A , B , DECODE( C , D , ‘1’ , ‘2’))
--A 가 B 일 경우 중에서 C 가 D 를 만족하면 ‘1’을 출력하고 C 가 D가 아닐 경우 ‘2’ 를 출력하고 A 가 B가 아닐 경우 ‘3’ 을 출력하는 경우
DECODE (A , B , DECODE( C , D , ‘1’ , ‘2’ ), '3')
CASE 조건 WHEN 결과1 THEN 출력1
[WHEN 결과2 THEN 출력2]
ELSE 출력3
END "컬럼명" (별칭)
ex. 비교조건이 '='인 경우 -> 바로 WHEN으로 조건 붙여주고 값 지정
SELECT name, tel
, CASE SUBSTR(tel, 1, INSTR(tel, ')')-1)
WHEN '02' THEN '서울'
WHEN '031' THEN '경기'
WHEN '051' THEN '부산'
WHEN '052' THEN '울산'
WHEN '055' THEN '경남'
ELSE 'ETC'
END loc
FROM student;
ex. 비교조건이 '='이 아닌 경우
SELECT name, TO_CHAR(birthday, 'MM')
, CASE WHEN TO_CHAR(birthday, 'MM') IN('01', '02', '03') THEN '1/4분기'
WHEN TO_CHAR(birthday, 'MM') IN('04', '05', '06') THEN '2/4분기'
WHEN TO_CHAR(birthday, 'MM') IN('07', '08', '09') THEN '3/4분기'
WHEN TO_CHAR(birthday, 'MM') IN('10', '11', '12') THEN '4/4분기'
ELSE 'ETC'
END 분기
FROM student;