🍈 날짜 처리 함수

SYSDATE

  • 현재 날짜와 시간 반환
  • format 변경
    • TO_CHAR(SYSDATE, HH24:MI:SS') : 24시간 포맷으로 시간만 반환
    • TO_CHAR(SYSDATE, HH:MI:SS') : 12시간 포맷으로 시간만 반환
    • TO_CHAR(SYSDATE, 'YYYYMMDD') : 날짜만 반환
select SYSDATE from dual;
--> 06-APR-23


##E LAST_DAY

  • 해당 월의 마지막 날짜
select LAST_DAY(날짜) from dual;
select LAST_DAY(TO_DATE('2023-01-15', 'YYYY-MM-DD')) from dual;
--> 31-JAN-23

달의 시작 일자 구하기

  • TRUNC(날짜, 'MM')
select TRUNC(SYSDATE, 'MM') from dual;
--> 01-APR-23


MONTHS_BETWEEN

  • 두 기간 사이의 개월 수
select MONTHS_BETWEEN(날짜1, 날짜2) from dual;
select MONTHS_BETWEEN(SYSDATE, TO_DATE('2022-04-06', 'YYYY-MM-DD')) from dual;
--> 12

select MONTHS_BETWEEN(SYSDATE, TO_DATE('2021-08-30', 'YYYY-MM-DD')) from dual;
--> 19.2385779
-- 1개월 미만의 일 수는 소수점으로 표시
-- TRUNC() 함수로 개월 수만 표현할 수 있음


ADD_MONTHS

  • 날짜의 월 더하거나 빼기
  • 바뀐 달에 해당 일자가 없으면 해당 월의 마지막 일자 반환
    • ex) 2019-03-31 의 이전달은 2019-02-28
select ADD_MONTHS(날짜, 숫자) from dual;
select ADD_MONTHS(TO_DATE('2021-12-16', 'YYYY-MM-DD'), -1) from dual;
--> 16-NOV-21

select ADD_MONTHS(TO_DATE('2021-12-16', 'YYYY-MM-DD'), 1) from dual;
--> 16-JAN-22

NEXT_DAY

  • 다음 첫번째 오는 해당 요일의 날짜
  • 월요일
    • 2
    • 월요일
    • MONDAY
    • MON
select NEXT_DAY(기준일자, 찾는요일) from dual;
select NEXT_DAY(SYSDATE, 1) from dual;
--> 09-APR-23


🍈 변환 함수

TO_CHAR

  • 날짜, 숫자 등의 값을 문자열로 변환


날짜 포맷 변경

select TO_CHAR(SYSDATE, 'YYYYMMDD')               -- 20230406
     , TO_CHAR(SYSDATE, 'YYYY/MM/DD')             -- 2023/04/04
     , TO_CHAR(SYSDATE, 'YYYY-MM-DD')             -- 2023-04-06
     , TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS')  -- 2023-04-04 10:30:23
from dual;
  • YYYY: 년, MM: 월, DD: 일, HH24: 24시간, HH: 12시간, MI: 분, SS: 초


소수점 변경

select TO_CHAR(123.456, 'FM990.999')  -- 123.456
     , TO_CHAR(1234.56, 'FM9990.99')  -- 1234.56
     , TO_CHAR(0.12345, 'FM9990.99')  -- 0.12
from dual;
  • FM: 문자열의 공백제거


지정한 길이만큼 0으로 채우기

select TO_CHAR(123)             -- 123
     , TO_CHAR(123, 'FM00000')  -- 00123
from dual;


TO_NUMBER

  • 숫자로 변환
select TO_NUMBER('숫자형식의 문자열') from dual;


TO_DATE

  • 문자열을 날짜로 변환
select TO_DATE('문자열', '날짜포맷') from dual;
select TO_DATE('2021-12-12', 'YYYY-MM-DD')
     , TO_DATE('2021-12-12 17:10:00', 'YYYY-MM-DD HH24:MI:SS')
from dual;
--> 12-DEC-21


🍈 기타 함수

NVL

  • NULL 처리 함수
NVL('값', '지정값')
  • 값이 NULL이면 지정값을 출력하고, 아니면 원래 값 그대로 출력
  • NULL 데이터가 존재하여 연산이 불가능한 경우 방지


NVL2

NVL2('값', '지정값1', '지정값2')
  • 값이 NULL이 아니면 지정값1을, NULL이면 지정값2를 출력


DECODE

  • DECODE(A, B, X, Y)
    • A = B 이면 X 출력
    • A ≠ B 이면 Y 출력
  • DECODE(A, B, X, C, Y, Z)
    • A = B 이면 X 출력
    • A = C 이면 Y 출력
    • A ≠ B 이고, A ≠ C이면 Z 출력
  • DECODE(A1, B, DECODE(A2, C, X, Y), Z)
    • A1 = B 이면서 A2 = C 이면 X 출력
    • A1 = B 이면서 A2 ≠ C 이면 Y를 출력
    • A1 ≠ B 이면 Z 출력
  • B, C, X, Y, Z 자리에 NULL도 가능


GREATEST / LEAST

  • 같은 행에서 다른 칼럼과 비교하여 최대값, 최소값 반환
select GREATEST(100, 200, 300, 400, 500) from dual;
--> 500

select LEAST(100, 200, 300, 400, 500) from dual;
--> 100

select GREATEST('AAA', 'BBB', 'CCC', 'DDD') from dual;
--> DDD

select GREATEST(SYSDATE, SYSDATE + 1, SYSDATE + 2)
from dual;
--> 08-APR-23
  • 주의
    • 값 중 NULL이 있으면 무조건 NULL이 반환되므로 변환하고 적용해야 함
    • 다른 유형의 인자값이 섞여있을 경우 오류 발생 (숫자와 문자형 숫자 제외)