SELECT(4) 날짜 관련 함수
ALTER SESSION SET NLS_LANGUAGE = 'KOREAN';
ALTER SESSION SET NLS_CURRENCY = '₩';
ALTER SESSION SET NLS_DATE_LANGUAGE = 'KOREAN';
ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD';
--미국식을 한국식으로 바꾸기
시작하기 앞서 오라클이나 VSCode의 날짜 형식이 미국식이나 다른 나라의 형식이라면
한국식으로 바꾸어 줘야 한다.
날짜 함수
오늘 날짜 및 시간
SELECT SYSDATE FROM dual;
시 분 초 표시
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') FROM dual;
TO_CHAR를 이용해야 한다.
SYSDATE의 형식을 바꾸기 위해서 사용
문자열을 날짜 형식으로 변환
SELECT TO_DATE('2000-10-10', 'YYYY-MM-DD') FROM dual;
오늘까지 살아온 날 수 구하기
SELECT TRUNC( SYSDATE - TO_DATE('2000-10-10', 'YYYY-MM-DD') ) FROM dual;
TRUNC는 절삭
현재 날짜에서 빼면 된다.
100일 후 일정 기간 후 날짜 구하기
SELECT TO_DATE('2021-07-10', 'YYYY-MM-DD') + 100 FROM dual;
남은 기간 구하기 D-DAY 디데이 구하기
SELECT TRUNC( TO_DATE('2021-12-25', 'YYYY-MM-DD') - SYSDATE ) FROM dual;
입사한지 100일이 되지 않은 사원 출력
SELECT name, hireDate, TRUNC(SYSDATE - hireDate) AS 근무일수 FROM emp WHERE (SYSDATE - hireDate) < 100;
INTERVAL
날짜 가감
증가 하거나 감소 시키거나 가능
SELECT SYSDATE + ( INTERVAL '1' YEAR ) FROM dual;
위 소스는 현재 시간에 1년을 더한 결과를 보여준다.
SELECT SYSDATE + ( INTERVAL '1' MONTH ) FROM dual;
마찬가지로 달만 증가 시킬 수 있다.
SELECT SYSDATE + ( INTERVAL '1' DAY ) FROM dual;
일만 증가 시키기
SELECT SYSDATE + ( INTERVAL '1' HOUR ) FROM dual;
시분초도 가능하다 !
SELECT SYSDATE + ( INTERVAL '1' MINUTE ) FROM dual;
SELECT SYSDATE + ( INTERVAL '1' SECOND ) FROM dual;
몇시간 몇분의 계산도 가능하다.
SELECT TO_CHAR(SYSDATE+(INTERVAL '02:30' HOUR TO MINUTE), 'YYYY-MM-DD HH24:MI:SS') FROM dual;
2시간30분 뒤에 시간을 나타낼 수 있다.
시분초 뿐만 아니라 ms 밀리세컨초 까지 나타 낼 수 있다.
SELECT SYSTIMESTAMP FROM dual;
SYSTIMESTAMP를 이용
EXTRACT
단어 뜻 그대로 추출 할 수 있다.
SELECT EXTRACT(YEAR FROM SYSDATE) FROM dual;
SELECT EXTRACT(MONTH FROM SYSDATE) FROM dual;
SELECT EXTRACT(DAY FROM SYSDATE) FROM dual;
년만 가져오기
월만 가져오기
일만 가져오기
입사년도 가져오기
SELECT name, hireDate, EXTRACT( YEAR FROM hireDate ) 입사년도 FROM emp;
MONTHS_BETWEEN(date1, date2)
두 날짜 사이의 월수 구하기
SELECT MONTHS_BETWEEN( TO_DATE('2021-08-05', 'YYYY-MM-DD'), TO_DATE('2021-07-02', 'YYYY-MM-DD') )
FROM dual;
SELECT TRUNC(MONTHS_BETWEEN( TO_DATE('2021-08-05', 'YYYY-MM-DD'), TO_DATE('2021-07-02', 'YYYY-MM-DD') ))
FROM dual;
TRUNC로 절삭해주자.
근무 년수 구하기
SELECT name, hireDate,
TRUNC(MONTHS_BETWEEN(SYSDATE, hireDate) / 12 ) 근무년수
FROM emp;
ADD_MONTHS
날짜에 개월을 더한다.
SELECT SYSDATE, ADD_MONTHS(SYSDATE, 1) 다음달 FROM dual;
SELECT SYSDATE, ADD_MONTHS(SYSDATE, -1) 이전달 FROM dual;
LAST_DAY
월의 마지막 일자 (28,29,30,31)
SELECT SYSDATE, LAST_DAY( SYSDATE ) FROM dual;
NEXT_DAY
첫번째 요일 반환
SELECT SYSDATE, NEXT_DAY(SYSDATE, '토요일') FROM dual;
--오늘 기준으로 가장 가까운 토요일 반환
SELECT SYSDATE, NEXT_DAY(SYSDATE, 7) FROM dual;
숫자로도 가능
1 = 일
2 = 월
3 = 화
4 = 수
5 = 목
6 = 금
7 = 토
TO_CHAR
숫자를 문자로 변환
날짜 함수에서 자주 쓰인다.
SELECT TO_CHAR(12345, '999,999') FROM dual;
숫자 12345를 문자로 변환 하는데 형태는 3자리수 마다 콤마를 찍는다.
9는 형태를 지정해줄때 사용한다.
날짜를 문자로 변환
SELECT SYSDATE, TO_CHAR(SYSDATE, 'YYYY"년" MM"월" DD"일"') FROM dual;
SYSDATE는 날짜형식인데 이걸 오른쪽에 형식으로 문자 변환을 해준다.
TO_NUMBER
문자를 숫자로 변환 해준다.
SELECT TO_NUMBER('23,123', '99,999') + 10 FROM dual;
TO_DATE
문자열을 날짜로 변경해준다.
SELECT TO_DATE('900101', 'RRMMDD') FROM dual;
RR은 문제를 발생시킬 수 있음
TO_TIMESTAMP
문자열을 TIMESTAMP로 변환해줌 (밀리초)
SELECT SYSDATE, SYSTIMESTAMP FROM dual;
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'),
TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD HH24:MI:SS.FF4')
FROM dual;