코딩테스트 SQL문제를 풀 때는 DATE_FORMAT을 사용해서 풀다가,
막상 업무를 할 때는 Oracle을 쓰니 날짜를 원하는 포맷으로 출력하는 것이 헷갈려서 같이 정리를 해보려한다.
Oracle에서 날짜 형식 변경하기
DATE타입의 날짜를 원하는 포맷으로 출력하기 위해 많이 쓰는 함수가 TO_CHAR('DATE', '원하는 포맷')이다.
TO_CHAR('DATE', '원하는 포맷') 으로 날짜/시간 출력하기
SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD') FROM DUAL;
SELECT TO_CHAR(SYSDATE,'yyyy-mm-dd') FROM DUAL;
-- 2023-05-20
SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS') FROM DUAL;
-- 2023-05-20 16:46:02
SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH:MI:SS') FROM DUAL;
-- 2023-05-20 04:46:02오라클에서는 날짜 포맷에서 대소문자를 구분하지 않으며, 현재 날짜와 시간을 SYSDATE로 가져올 수 있다.
TO_CHAR('DATE', '원하는 포맷') 으로 요일 출력하기
SELECT TO_CHAR(SYSDATE,'DAY') FROM DUAL; -- 화요일
SELECT TO_CHAR(SYSDATE,'DY') FROM DUAL; -- 화
SELECT TO_CHAR(SYSDATE,'DAY','NLS_DATE_LANGUAGE=American') FROM DUAL; -- TUESDAY
SELECT TO_CHAR(SYSDATE,'DY','NLS_DATE_LANGUAGE=American') FROM DUAL; -- TUENLS_DATE_LANGUAGE 설정을 통해 원하는 언어로 요일을 출력할 수 있다.
기본 설정이 American 으로 되어있는데 한국어로 출력하고 싶다면 위의 설정을 'Korean'으로 바꿔주기만 하면 된다.
0 없애서 출력하기
SELECT TO_CHAR(SYSDATE,'MM-DD') FROM DUAL;    -- 05-23
SELECT TO_CHAR(SYSDATE,'FMMM-DD') FROM DUAL;  -- 5-23날짜나 시간 앞에 불필요하게 붙는 '0'을 제거하기위해서 위의 예시처럼 'FM'을 사용하여 제거할 수 있다.
MySQL에서 날짜 형식 변경하기
DATE타입의 날짜를 원하는 포맷으로 출력하기 위해서는 DATE_FORMAT('DATE', '원하는 포맷')을 사용한다.
데이터 포맷이 정해져있어 해당 룰을 따라야하며 자세한 룰은 해당 링크에 잘 나와있다.
https://www.w3schools.com/sql/func_mysql_date_format.asp
MySQL DATE_FORMAT() Function
W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.
www.w3schools.com
DATE_FORMAT('DATE', '원하는 포맷') 으로 날짜/시간 출력하기
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %h:%i:%s') FROM DUAL;
-- 2023-05-20 04:11:53
SELECT DATE_FORMAT(now(),'%y-%m-%d %h:%i:%s') FROM DUAL;
-- 23-05-20 04:11:53대소문자에 따른 출력 결과가 다르며, 현재 날짜는 now()를 통해 가져올 수 있다.
DATE_FORMAT('DATE', '원하는 포맷') 으로 요일 출력하기
SELECT DATE_FORMAT(NOW(),'%W') FROM DUAL; -- Tuesday
SELECT DATE_FORMAT(NOW(),'%a') FROM DUAL; -- Tue영어 출력은 지원이 되기때문에 간단하지만, 한국어로 출력하고 싶다면 CASE-WHEN 절이나 SUBSTRING 등을 사용한 로직이 필요하다.
0 없애서 출력하기
SELECT DATE_FORMAT('2023-02-05','%Y-%c-%e'); -- 2023-2-5MySQL에서 지원하는 형식을 활용할 수 있다. 그런데 정렬을 하게되면 문자가 기준이 되므로 8~10월의 데이터를 오름차순 정렬하면 ex> 10 - 8 - 9 로 정렬이 되어버린다.
해결방법으로는 MONTH() 를 사용할 수 있고 방법은 아래를 참고한다.
2023.10.26 - [SQL] - [MySQL] 연/월/일 출력하기 ( 좌측 0 제거 )
정리
등록 / 업데이트 날짜를 기준으로 데이터를 검색해야하는 경우가 꽤나 있어, 기본적으로 알아둬야할 것 같다.
이를 통해 기존 데이터와 비교 연산을 해보며 연습해봐도 좋을 것 같다.
MySQL의 DATE_FORMAT() 과 달리 오라클의 TO_CHAR()은 날짜 형식 뿐 아니라 숫자 형식도 다듬을 수 있다.
'SQL' 카테고리의 다른 글
| [Oracle/MySQL] CONCAT, 문자열 합치기 (0) | 2023.06.08 | 
|---|---|
| [MySQL] REGEXP, 정규표현식을 이용하여 검색하기 (0) | 2023.06.06 | 
| [Oracle/MySQL] 날짜 연산, 이전 달 출력하기 (0) | 2023.05.31 | 
| [Oracle/MySQL] NVL과 IFNULL, COALESCE로 널 값 처리하기 (0) | 2023.05.24 | 
| [Oracle/MySQL] SUBSTR과 SUBSTRING, 문자열 자르기 (5) | 2023.05.20 | 
