코딩 개발/ORACLE

[ORACLE] DECODE, TO_CHAR(요일), TO_DATE

호소세 2024. 2. 20. 14:16
728x90
반응형

오늘은 ORACLE SQL 함수 DECODE, TO_CHAR, TO_DATE에 대하여 알아보겠습니다.

 

DECODE

DECODE(expr, search1, result1 [, search2, result2, ...] [, default])
  • expr: 비교할 값입니다.
  • search1, search2, ...: 비교 대상 값입니다.
  • result1, result2, ...: 대응되는 search 값에 따라 반환될 결과 값입니다.
  • default (선택사항): 모든 search 값에 대해 일치하는 값이 없을 때 반환될 기본 값입니다.

DECODE 함수의 작동 방식은 다음과 같습니다:

  1. expr 값이 search1과 같으면 result1을 반환합니다.
  2. expr 값이 search2와 같으면 result2를 반환합니다.
  3. 이러한 과정을 반복하고 일치하는 search 값이 없을 경우 기본값인 default를 반환합니다.

이런 식으로 함수가 실행됩니다.

예시를 한번 볼까요?

 

SELECT
	SCH_S_DATE,
	TO_CHAR(SCH_S_DATE, 'D') AS START_WEEK,
	DECODE(TO_CHAR(SCH_S_DATE, 'D'), 1, '일', 2, '월' , 3, '화', 4, '수', 5, '목', 6, '금', 7, '토') AS START_WEEK_STR,
	TO_CHAR(SCH_E_DATE, 'MM.DD') AS END_DT ,
	TO_CHAR(SCH_E_DATE, 'D') AS END_WEEK,
	DECODE(TO_CHAR(SCH_E_DATE, 'D'), 1, '일', 2, '월' , 3, '화', 4, '수', 5, '목', 6, '금', 7, '토') AS END_WEEK_STR,
	TO_DATE('20240206', 'YYYYMMDD'), 
	TO_DATE('24.02.06', 'YY.MM.DD') 
FROM
	CS_SCHEDULE_MGR

 

이런 식으로 있을 때 결과 값을 보면

24년 2월

혹시 요일이 궁금하실까 봐 2월 달력도 보여드릴게요!

START_WEEK  의 값이 '6'이면 START_WEEK_STR의 값이 '금'이 됩니다.

(조금 있다가 TO_CHAR 요일에 대하여 알아보겠습니다.)

아무튼 이렇게 if, else if 문을 사용하는 것이 DECODE 함수입니다. 그림의 결과 값을 잘 확인해 보시면 이해가 확 되실 겁니다!

 

TO_CHAR (요일)

위의 예시코드를 보시면

TO_CHAR(SCH_S_DATE, 'D')
TO_CHAR(SCH_E_DATE, 'MM.DD')

 

이런 것들이 보이시죠?

Format 별로 날짜가 다르게 나타나게 됩니다.

요일 관련 코드

  1. D: 요일을 숫자로 표현합니다. 일요일은 1부터 시작하여 토요일은 7까지입니다.
  2. DAY: 요일을 전체 문자열로 표현합니다. 예: 'SUNDAY', 'MONDAY' 등
  3. DY: 요일을 약어로 표현합니다. 예: 'SUN', 'MON' 등
  4. DYY: 요일을 숫자로 표현하되, 한 자리일 경우 앞에 0을 붙입니다. 예: '01'부터 '07'까지
  5. DDD: 년 중 날짜를 나타내며, 요일을 1부터 366까지의 숫자로 표현합니다.
  6. DL: 요일을 해당 언어의 날짜 표현 방식에 따라 표시합니다.

월 관련 코드

  • MM: 두 자리 숫자로 월을 표현합니다. 예: 01부터 12까지
  • MON: 약어로 월을 표현합니다. 예: 'JAN', 'FEB' 등
  • MONTH: 전체 문자열로 월을 표현합니다. 예: 'JANUARY', 'FEBRUARY' 등

연도 관련 코드

  • YY: 두 자리 숫자로 연도를 표현합니다. 예: 00부터 99까지
  • YYYY: 네 자리 숫자로 연도를 표현합니다. 예: 0001부터 9999까지

자신이 사용하고 싶은 방식으로 연습해 보시면 될 것 같아요!

YYYYMMDD, YY.MM.DD

 

이 표현 format이 중요한 게 나중에 화면에 뿌릴 때 sql에서 받아오면 따로 js 함수를 만들 필요가 없습니다!

 

TO_DATE

위의 예시코드를 보시면

TO_DATE('20240206', 'YYYYMMDD'), 
TO_DATE('24.02.06', 'YY.MM.DD')

 

뭐... 어디 화면에서 보내주는 값이 20240206이나 24.02.06인데 DB에는 날짜 형식으로 저장하고 싶을 수 있을 겁니다.

그럴 때 이 함수를 사용해서 DATE 형식으로 변경할 수 있습니다.

 

그래서 

TO_DATE('24.02.06 화요일', 'YY.MM.DD DAY')

이런 것도 사용할 수 있습니다. (대신 요일이 잘 맞아야 합니다.)

소감

뭐든 많이 알면 좋지만 SQL문에 대해서 많이 알게 되면 데이터를 한번 더 변형하는 함수를 생성하지 않아도 되니 좋습니다.

자기가 화면에 나타내고 싶은 형식으로 데이터베이스에서 받아오게 되면 훨씬 코드를 쉽게 사용할 수 있습니다.

반응형