https://www.youtube.com/user/newlec1의 내용을 정리해서 포스팅합니다.
[ SYSDATE / CURRENT_DATE / SYSTIMESTAMP / CURRENT_TIMESTAMP ]
SYS의 의미는 현재 오라클 서버가 설치되어 있는 곳의 시간을 의미한다.
CURRENT는 세션에 대한 사용자를 기반으로 해서 세션에 설정된 시간대에 따른 날짜를 얻어다주는 함수를 의미한다.
SYS와 CURRENT 모두 파라미터를 사용하지 않는다. 괄호가 없을 뿐 함수이다.
* SELECT SYSDATE, CURRENT_DATE, SYSTIMESTAMP, CURRENT_TIMESTAMP FROM DUAL;
- SYSDATE은 오라클 서버의 시간대를 얻고 싶을 때 사용
- 날짜에 대한 시, 분, 초까지 얻을 수 있다.
- CURRENT_DATE는 세션 설정에 따른 시간을 얻고 싶을 때 사용
- SYSTIMESTAMP도 SYSDATE와 마찬가지로 오라클 서버의 시간대를 얻고 싶을 때 사용
- 날짜에 대한 밀리 세컨까지 얻을 수 있다.
- CURRENT_TIMESTAMP는 세션 설정에 따른 시간을 밀리 세컨까지 얻고 싶을 때 사용
접속자가 자신의 세션에 대한 시간대를 바꾸게 되면 그 시간대에 따른 날짜를 얻을 수 있다.
그렇다면 그 시간대에 따른 날짜를 얻는 방법은 무엇일까?
[ 세션 시간과 포맷 변경 ]
* ALTER SESSION SET TIME_ZONE = '-1:0'
- 국내는 ALTER SESSION SET TIME_ZONE = '09:00'; 를 사용한다.
* ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';
- NLS는 National Language Support의 약자로 나라마다 날짜 표기법이 달라서 입맞에 맞게 날짜 포맷을 정해줄 수 있다.
- HH24 또는 HH12가 있다.
이제 원하는 포맷의 날짜를 얻었는데 연도, 월, 일 등 원하는 것만 추출하고 싶다면?
[ EXTRACT(YEAR/MONTH/DAY/HOUR/MINUTE/SECOND) ]
* SELECT EXTRACT(YEAR FROM SYSDATE) FROM DUAL;
* SELECT EXTRACT(MONTH FROM SYSDATE) FROM DUAL;
* SELECT EXTRACT(DAY FROM SYSDATE) FROM DUAL;
* SELECT EXTRACT(MINUTE FROM SYSDATE) FROM DUAL;
* SELECT EXTRACT(SECOND FROM SYSDATE) FROM DUAL;
EX) 가입 회원 중에 비수기(2,3,11,12)월 달에 가입한 회원을 조회하시오.
SELECT * FROM MEMBERS WHERE EXTRACT(MONTH FROM REGDATE) IN (2,3,11,12);
[ ADD_MONTHS(날짜, 정수) ]
날짜를 누적하는 함수를 알아보자.
* SELECT ADD_MONTHS(SYSDATE, 1) FROM DUAL;
* SELECT ADD_MONTHS(SYSDATE, -1) FRMO DUAL;
- 해당하는 '월'을 +1, -1하여 출력한다.
EX) 가입한 회원 중 6개월 미만인 회원을 조회하시오.
SELECT * FROM MEMBERS WHERE ADD_MONTHS(SYSDATE, -6) < REGDATE;
[ MONTHS_BETWEEN(날짜, 날짜) ]
날짜의 차이를 알아내는 함수를 알아보자.
* SELECT MONTHS_BETWEEN(SYSDATE, TO_DATE('2013-12-25')) FROM DUAL;
- TO_DATE는 문자열을 날짜 포맷에 맞게 쓰면 그것을 날짜로 변환하는 함수이다.
EX) 가입한 회원 중 6개월 미만인 회원을 조회하시오.
SELECT * FROM MEMBERS WHERE MONTHS_BETWEEN(SYSDATE, REGDATE) < 6;
[ NEXT_DAT(현재날짜, 다음요일) ]
다음 요일을 알려주는 함수를 알아보자.
이번주에 토요일이 몇 일인지 알고 싶을 때는?
* SELECT NEXT_DAY(SYSDATE, '토') FROM DUAL;
* SELECT NEXT_DAY(SYSDATE, '토요일') FROM DUAL;
* SELECT NEXT_DAY(SYSDATE, 7) FROM DUAL;
- 일요일이 1부터 시작하기 때문에 위 세개의 구문은 모두 동일하다.
[ LAST_DAY(날짜) ]
월의 마지막 일자를 알려주는 함수이다.
* SELECT LAST_DAY(SYSDATE) FROM DUAL;
[ ROUND/TRUNC(날짜, 포맷) ]
지정된 범위에서 날짜를 반올림하는/자르는 함수이다.
* SELECT ROUND(SYSDATE, 'CC'), TRUNC(SYSDATE, 'CC') FROM DUAL;
* SELECT ROUND(SYSDATE, 'YEAR'), TRUNC(SYSDATE, 'YEAR) FROM DUAL;
* SELECT ROUND(SYSDATE, 'Q'), TRUNC(SYSDATE, 'Q') FROM DUAL;
* SELECT ROUND(SYSDATE, 'MONTH'), TRUNC(SYSDATE, 'MONTH') FROM DUAL;
* SELECT ROUND(SYSDATE, 'W'), TRUNC(SYSDATE, 'W') FROM DUAL;
* SELECT ROUND(SYSDATE, 'DAY'), TRUNC(SYSDATE, 'DAY') FROM DUAL;
* SELECT ROUND(SYSDATE, 'D'), TRUNC(SYSDATE, 'D') FROM DUAL;
* SELECT ROUND(SYSDATE, 'HH), TRUNC(SYSDATE, 'HH') FROM DUAL;
* SELECT ROUND(SYSDATE, 'MI'), TRUNC(SYSDATE, 'MI') FROM DUAL;
'Programming > 데이터베이스' 카테고리의 다른 글
[오라클 데이터베이스] NULL 관련 함수 (NVL/NVL2/NULLIF)와 DECODE 함수 (1) | 2019.10.13 |
---|---|
[오라클 데이터베이스] 형식 변환 함수 (TO_DATE/TO_CHAR/TO_NUMBER/TO_TIMESTAMP) (0) | 2019.10.13 |
[오라클 데이터베이스] 숫자 내장 함수 (ABS/SIGN/ROUND/TRUNC/MOD) (0) | 2019.10.13 |
[오라클 데이터베이스] 문자열 내장 함수 #2 (LPAD/RPAD/INITCAP/INSTR/LENGTH) (0) | 2019.10.13 |
[오라클 데이터베이스] 문자열 내장 함수 #1 (SUBSTR/CONCAT/TRIM/LOWER/UPPER/REPLACE/TRANSLATE) (0) | 2019.10.13 |