찌니의 프로그래밍 삼매경

[SQL] 프로그래머스 DATETIME에서 DATE로 형변환 본문

SQL/SQL 문제풀이

[SQL] 프로그래머스 DATETIME에서 DATE로 형변환

zzI니☆ 2021. 1. 28. 10:09
728x90

https://programmers.co.kr/learn/courses/30/lessons/59414?language=mysql

 

코딩테스트 연습 - DATETIME에서 DATE로 형 변환

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디

programmers.co.kr

 


1) 오라클 ORACLE

정답

SELECT
    ANIMAL_ID
    ,NAME
    ,TO_CHAR(DATETIME, 'YYYY-MM-DD') AS 날짜
FROM ANIMAL_INS
ORDER BY ANIMAL_ID

TO_CHAR 날짜 변환 포맷

포맷 설명 사용 예
AM, A.M. 오전 TO_CHAR(SYSDATE, ‘AM’) → 오전
PM, P.M. 오후 TO_CHAR(SYSDATE, ‘PM’) → 오후
YYYY, YYY, YY, Y 연도 TO_CHAR(SYSDATE, ‘YYYY’) → 2014
MONTH, MON TO_CHAR(SYSDATE, ‘MONTH’) → 2월
MM 01~12 형태의 월 TO_CHAR(SYSDATE, ‘MM’) → 02
D 주중의 일을 1~7로 TO_CHAR(SYSDATE, ‘D’) → 2
DAY 주중 일을 요일로 표시 TO_CHAR(SYSDATE, ‘DAY’) → 월요일
DD 일을 01~31 형태로 표시 TO_CHAR(SYSDATE, ‘DD’) → 01
DDD 일을 001~365 형태로 TO_CHAR(SYSDATE, ‘DDD’) → 041
DL 현재 일을 요일까지 표시 TO_CHAR(SYSDATE, ‘DL’) → 2014년 2월 10일 월요일
HH, HH12 시간을 01~12시 형태로 TO_CHAR(SYSDATE, ‘HH’) → 04
HH24 시간을 01~23시 형태로 TO_CHAR(SYSDATE, ‘HH24’) → 16
MI 분을 00~59분 형태로 TO_CHAR(SYSDATE, ‘MI’) → 56
SS 초를 01~59초 형태로 TO_CHAR(SYSDATE, ‘SS’) → 33
FF 밀리초(milliseconds) TO_CHAR(SYSTIMESTAMP, 'YYYYMMDDHH24MISSFF')
WW 주를 01~53주 형태로 TO_CHAR(SYSDATE, ‘WW’) → 06

TO_CHAR 숫자 변환 포맷

포맷 설명 사용 예
, (콤마) 콤마로 표시 TO_CHAR(123456, ‘999,999’) → 123,456
. (소수점) 소수점 표시 TO_CHAR(123456.4, ‘999,999.9’) → 123,456.4
9 한 자리 숫자, 실제 값보다 크거나 같게 명시 TO_CHAR(123456, ‘999,999’) → 123,456
PR 음수일 때 < >로 표시 TO_CHAR(-123, ‘999PR’) → <123>
RN, rn 로마 숫자로 표시 TO_CHAR(123, ‘RN’)→CXXIII
S 양수이면 +, 음수이면 - 표시 TO_CHAR(123, ‘S999’) → +123

 

 

 

 

 


2) MYSQL

정답

SELECT
    ANIMAL_ID
    ,NAME
    ,DATE_FORMAT(DATETIME, '%Y-%m-%d') AS 날짜
FROM ANIMAL_INS
ORDER BY ANIMAL_ID

MySQL DATE_FORMAT

Syntax:

DATE_FORMAT(날짜, 포맷)
  • 날짜를 특정 포맷의 문자로 변환하는 함수
  • 첫 번째 매개변수로 날짜를, 두 번째 매개변수로 포맷을 지정한다.

DATE_FORMAT 포맷 정리

포맷 설명
%a 일(Sun ~ Sat)
%b 월(Jan ~ Dec)
%c 월(0 ~ 12)
%D 일(1st, 2nd, 3rd, ...)
%d 일(01 ~ 31)
%e 일(0 ~ 31)
%f Microseconds (000000 to 999999)
%H 시간(00 ~ 23)
%h 시간(00 ~ 12)
%I 시간(00 ~ 12)
%i 분(00 ~ 59)
%j Day of the year (001 to 366)
%k 시간(0 ~ 23)
%l 시간(1 ~ 12)
%M 월(January ~ December)
%m 월(00 ~ 12)
%p AM or PM
%r 시간(12시)을 hh:mm:ss AM/PM 형식으로
%S 초(00 ~ 59)
%s 초(00 ~ 59)
%T 시간(24시)을 hh:mm:ss 형식으로
%U Week where Sunday is the first day of the week (00 ~ 53)
%u Week where Monday is the first day of the week (00 ~ 53)
%V Week where Sunday is the first day of the week (01 ~ 53). Used with %X
%v Week where Monday is the first day of the week (01 ~ 53). Used with %x
%W 일(Sunday ~ Saturday)
%w Day of the week where Sunday=0 and Saturday=6
%X Year for the week where Sunday is the first day of the week. Used with %V
%x Year for the week where Monday is the first day of the week. Used with %v
%Y 연도(4자리)
%y 연도(2자리)

 


TO_CHAR & DATE_FORMAT 포맷 매핑

Oracle의 TO_CHAR 함수를 MySQL의 DATE_FORMAT으로 변경할 때 대응되는 포맷을 표로 정리한 것이다.

결과 Oracle TO_CHAR MySQL DATE_FORMAT
연도(4자리) YYYY %Y
연도(2자리) YY %y
연도(4자리, YYYY와 동일) RRRR %Y
연도(2자리, YY와 동일) RR %y
월(1~12) MM %m
월(Jan~Dec) MON %b
월(January~December) MONTH %M
일(1~31) DD %d
일(Sun~Sat) DY %a
시간(0~23) HH24 %H
시간(1~12) HH 또는 HH12 %h
분(0~59) MI %i
초(0~59) SS %s

 

 

References

728x90
Comments