본문 바로가기
Study/SQL

5.날짜함수

by 로롤로롱 2023. 4. 27.

/*
<날짜관련 함수>
1) SYSDATE
    - 현재 날짜와 시간을 반환
2) MONTHS_BETWEEN(DATE1, DATE2)
    - 입력받은 두 날짜 사이의 개월수를 반환
    - 결과 값 타입 NUMBER
3) ADD_MONTHS(DATE, NUMBER)
    - 특정 날짜에 입력받은 숫자만큼의 개월수를 더한 날짜를 반환합니다.
    - 결과 값 타입 DATE
** 날짜형식 FMMM <- 월 출력 (앞에 0빼고)
*/

SELECT ADD_MONTHS(SYSDATE, 6) FROM DUAL;
SELECT MONTHS_BETWEEN(ADD_MONTHS(SYSDATE, 6), SYSDATE) FROM DUAL;
SELECT MONTHS_BETWEEN(SYSDATE,ADD_MONTHS(SYSDATE, 6)) FROM DUAL;

SELECT FLOOR(MONTHS_BETWEEN(SYSDATE, hire_date)/12) AS 근속연수
FROM emp
ORDER BY FLOOR(MONTHS_BETWEEN(SYSDATE, hire_date)/12) DESC;

/*
4) NEXT_DAY(DATE, 요일(문자|숫자))
    - 특정 날짜에서 구하려는 요일의 가장 가까운 날짜를 리턴
    - 1 : 일요일, 2 : 월요일
5) LAST_DAY(DATE)
    - 해당 뭘의 마지막 날짜를 반환
    - 반환결과 DATE타입
*/
SELECT SYSDATE, LAST_DAY(SYSDATE) FROM DUAL;
SELECT SYSDATE, NEXT_DAY(SYSDATE, '금') FROM DUAL;
SELECT SYSDATE, NEXT_DAY(SYSDATE, 1) FROM DUAL;
/*
NLS : 국가별 언어 지원
언어 지원과 관련된 설정 정보를 확인하는 쿼리
*/
--NLS설정 확인 명령어
SELECT * FROM NLS_SESSION_PARAMETERS;
ALTER SESSION SET NLS_LANGUAGE = AMERICAN; -- 언어변경
SELECT SYSDATE, NEXT_DAY(SYSDATE, 'sunday') FROM DUAL; -- 영어문자열 가능
ALTER SESSION SET NLS_LANGUAGE = KOREAN; 
--날짜 포맷 변경
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD';
SELECT SYSDATE FROM DUAL;

/*
6) EXTRACT(YEAR|MONTH|DAY FROM DATE)
    - 특정 날짜에서 연도, 월, 일 정보를 추출해서 반환
*/
SELECT EXTRACT(YEAR FROM SYSDATE) FROM DUAL;

SELECT emp_name, EXTRACT(YEAR FROM hire_date) AS 입사년도, EXTRACT(MONTH FROM hire_date) AS 입사월,EXTRACT(DAY FROM hire_date) AS 입사일
FROM emp
WHERE  EXTRACT(YEAR FROM hire_date) = 2001;

SELECT employee_id, emp_name, hire_date, FLOOR(MONTHS_BETWEEN(SYSDATE, hire_date)/12) AS 근속년수
FROM emp
WHERE FLOOR(MONTHS_BETWEEN(SYSDATE, hire_date)/12)>20
ORDER BY FLOOR(MONTHS_BETWEEN(SYSDATE, hire_date)/12) DESC;

/*
7) ROUND(DATE, 'YEAR'|'MONTH'|'DAY')
    - 반올림한 날짜를 반환
8) TRUNC(DATE, 'YEAR'|'MONTH'|'DAY')
    - 잘라낸 날짜를 반환
    SELECT TRUNC(DATE, 'YEAR') -- 월, 일 초기화
     , TRUNC(DATE, 'MONTH') -- 일 초기화
     , TRUNC(DATE, 'DAY') -- 요일 초기화 (일요일)
*/

SELECT ROUND(SYSDATE, 'DAY') FROM DUAL;
SELECT ROUND(TO_DATE(20230416), 'MONTH') FROM DUAL;
SELECT TRUNC(SYSDATE, 'DAY') FROM DUAL;

'Study > SQL' 카테고리의 다른 글

7.NULL처리 함수  (0) 2023.04.29
6.형변환함수  (0) 2023.04.28
4.숫자 함수  (0) 2023.04.26
3.문자열 함수  (0) 2023.04.25
2.SELECT  (0) 2023.04.24

댓글