프로그래밍/DBMS

SELECT(4) 날짜 관련 함수

Heidong 2021. 8. 9. 00:35
반응형
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;

 

반응형