본문 바로가기

프로그래밍/오라클

[ORACLE] 오라클 날짜 함수

[ORACLE] 오라클 날짜 함수




1. 날짜 포맷



CC: 세기(Century)
YEAR: 년도
YYYY, YYY, YY, Y : 년도 자릿수 표기
BC, AD : 서기 등으로 표시
Q: 분기 표시
MM : 두자리로 월표시
MONTH: 영어로 표시
MON: 영어로 3자리로 월표시
RM: 로마자로 표시 i, ii. xi
WW, WI : 1년기준 몇째주 표시
W :한달기준 몇째주 표시
DDD: 365(1년기준 )  몇째 
DD: 날짜를 두자리로 표시
D: 요일을 숫자로 표시
DY: 요일 한자리로 표시
DAY: 요일 표시
AM, PM, A.M. , P.M. : 오전오후 표시
HH, HH12 : 12 기준으로 표시
HH24 : 24 기준으로 표시
/, "of" : 날짜의 중간에 문자 표시 -> 
SPTH: 날짜를 영문 서수로 표시
SP : 날짜를 영문 숫자로 표시




2.연습문제


2.1. 오늘 날짜 시간은 어떻게 구하나?

--    날짜형_연습문제 1. 한 시간 후와 12000일째 되는 날을 검색하시오.
SELECT  TO_CHAR(SYSDATE + 1/24, 'YYYY/MM/DD HH24:MI:SS')
FROM    DUAL;

SELECT  TO_CHAR(SYSDATE + 12000, 'YYYY/MM/DD')
FROM    DUAL;



2.2. ADD_MONTHS : ADD_MONTH(날짜, 월수)

--   날짜형_연습문제 2. 4개월 뒤 오늘 출력하시오.
SELECT  ADD_MONTHS(SYSDATE, 4)
FROM    DUAL;

--   날짜형_연습문제 2.1 12개월 전을 출력하시오.
SELECT  ADD_MONTHS(SYSDATE, -12)
  FROM  DUAL;



2.3.  NEXT_DAY  : NEXT_DAY(날짜, 요일)

--      => 날짜로부터 앞으로 해당요일에 제일 가까운 날짜를 리턴
SELECT  NEXT_DAY(SYSDATE, '월')
FROM    DUAL;



2.4.  LAST_DAY : LAST_DAY(월)

--  4.  LAST_DAY : LAST_DAY(월)
--      =>  해당 월의 마지날 날짜를 리턴
--          년월일까지 문자형으로 넣어주면, 옵티마이저가 알아서 해결
--          년월일까지 숫자형으로 넣어주면, 데이터타입이 통일되어있지 않다고 뜬다.
--          TO_DATE로 묶어주면, fmt만 명시해준다면 년월만 적어도 오케이!
--      =>  주석처리한 친구들은 에러난다!!
SELECT  LAST_DAY(TO_DATE(20161111)) "1",
        LAST_DAY(TO_DATE(201611,'YYYYMM')) "2",
        LAST_DAY('20161111') "3",
        LAST_DAY(SYSDATE) "4"
FROM    DUAL;



2.5.  ROUND : ROUND(날짜, [fmt])

--  5.  ROUND : ROUND(날짜, [fmt])
--      =>  해당날짜에 년, 월, 일, 시, 분, 초 각각 fmt 하나를 기준으로 반올림 한다.
--      =>  초는 에러가 난다. 왜그럴까? 찾아봐야겠다.
SELECT  ROUND(SYSDATE, 'YYYY') "년",
        ROUND(SYSDATE, 'MM') "월",
        ROUND(SYSDATE, 'DD') "일",
        ROUND(SYSDATE, 'HH') "시",
        TO_CHAR(ROUND(SYSDATE, 'MI'), 'YYYY.MM.DD HH24:MI:SS') "분"
--        TO_CHAR(ROUND(SYSDATE, 'SS'), 'YYYY.MM.DD HH24:MI:SS') "초"
FROM    DUAL;