오늘은 ORACLE SQL 함수 DECODE, TO_CHAR, TO_DATE에 대하여 알아보겠습니다.
DECODE
DECODE(expr, search1, result1 [, search2, result2, ...] [, default])
- expr: 비교할 값입니다.
- search1, search2, ...: 비교 대상 값입니다.
- result1, result2, ...: 대응되는 search 값에 따라 반환될 결과 값입니다.
- default (선택사항): 모든 search 값에 대해 일치하는 값이 없을 때 반환될 기본 값입니다.
DECODE 함수의 작동 방식은 다음과 같습니다:
- expr 값이 search1과 같으면 result1을 반환합니다.
- expr 값이 search2와 같으면 result2를 반환합니다.
- 이러한 과정을 반복하고 일치하는 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
이런 식으로 있을 때 결과 값을 보면
혹시 요일이 궁금하실까 봐 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 별로 날짜가 다르게 나타나게 됩니다.
요일 관련 코드
- D: 요일을 숫자로 표현합니다. 일요일은 1부터 시작하여 토요일은 7까지입니다.
- DAY: 요일을 전체 문자열로 표현합니다. 예: 'SUNDAY', 'MONDAY' 등
- DY: 요일을 약어로 표현합니다. 예: 'SUN', 'MON' 등
- DYY: 요일을 숫자로 표현하되, 한 자리일 경우 앞에 0을 붙입니다. 예: '01'부터 '07'까지
- DDD: 년 중 날짜를 나타내며, 요일을 1부터 366까지의 숫자로 표현합니다.
- 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문에 대해서 많이 알게 되면 데이터를 한번 더 변형하는 함수를 생성하지 않아도 되니 좋습니다.
자기가 화면에 나타내고 싶은 형식으로 데이터베이스에서 받아오게 되면 훨씬 코드를 쉽게 사용할 수 있습니다.
'코딩 개발 > ORACLE' 카테고리의 다른 글
[Oracle] MERGE INTO, USING ON, WHEN (NOT) MATCHED THEN (2) | 2024.03.29 |
---|---|
[ORACLE] ROWNUM, ROW_NUMBER(), ORDER BY 여러개 알아보기 (0) | 2023.09.26 |
[Oracle] INSTR 함수 (In String) (0) | 2023.09.24 |
[ORACLE] - NVL, NVL2 함수 (Null Value) (0) | 2023.09.24 |
DBeaver - CSV 파일 내보내기 및 한글 깨짐 이슈 해결 (1) | 2023.08.30 |