본문 바로가기
프로그래밍/SQL

[SQL 고득점 Kit] DATETIME에서 DATE로 형 변환 / MySQL에서 날짜 형식 변환하는 법 정리(DATE_FORMAT 총정리, SUBSTR) / 주석 처리법

by hi-rachel 2023. 2. 11.

✏️ 문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

✏️ 정답

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

 

2018-01-22 14:32:00 이와 같은 날짜 데이터 형식을  2018-01-22 이와 같이 바꿔주는 문제

날짜 데이터 형식을 변환하는 문제는 자주 볼 수 있고 여러 방법이 있어 이를 정리해보려고 한다.

 

참고로 날짜 함수 SYSDATE을 출력하면 2018-01-22 14:32:00와 같이 연, 월, 시, 분, 초를 반환해주는데 이는 nls_date_format에 따라 출력 양식이 달라질 수 있다.

NLS_DATE_FORMAT = "MM/DD/YYYY"

위와 같이 외국은 날짜를 우리와 쓰는 순서가 다를 수 있고 현업에서도 이러한 문제로 날짜 데이터 형식 변환을 많이 해줄 것 같다.

 

※ 주요 format 형식

포맷 표현 의미 포맷 표현 의미
YYYY HH 시(12)
MM HH24 시(24)
DD MI
    SS

 

✏️ 날짜 형식 변환 방법 정리

1. DATE_FORMAT(COLUMN명, '%Y-%m-%d')

: YYYY-MM-DD 형태로 변환된다. ex) 2023-02-11

 

※ DATE_FORMAT 형식 총정리 (STR_TO_DATE, TIME_FORMAT, UNIX_TIMESTMAP에 동일하게 적용)

식별자(Specifier) 설명 식별자(Specifier) 설명
%a 요일 이름 축약형(Sun~Sat) %b 월 이름 축약형(Jan~Dec)
%c 월, 숫자형(0~12) %D 날짜 + 영어 접미사(0th, 1st, 2nd, 3rd, ...)
%d 날짜, 숫자형(00~31) %e 날짜, 숫자형(0~31)
%f Microseconds(000000~999999) %H 24시간 형식(00~23)
%h, %I 12시간 형식(01~12) %i 분, 숫자형(00~59)
%j 일년 안에 날짜 수(001~366) %k 24시간 형식(0~23)
%l 12시간 형식(1~12)    
%M 월 이름(January~December) %m 월, 숫자형(00~12)
%p AM 또는 PM %r Time, 12시간(hh:mm:ss AM/PM)
%S, %s  초(00~59) %T Time, 24시간(hh:mm:ss)
%U Week(00~53), 일요일이 주의 시작일, WEEK() mode 0 %u Week(00~53), 월요일이 주의 시작일, WEEK() mode 1
%V Week(01~53), 일요일이 주의 시작일, WEEK() mode 2, %X와 함께 사용 %v Week(01~53), 월요일이 주의 시작일, WEEK() mode 3, %x와 함께 사용
%W 요일 전체 이름 (Sunday~Saturday) %w 주말(0=Sunday, 6=Saturday)
%X 일요일이 주의 시작일일 때 년도, 4개의 숫자 표현, %V와 함께 사용 %x 월요일이 주의 시작일일 때 년도, 4개의 숫자 표현, %v와 함께 사용
%Y 년도, 4개의 숫자 표현 %y 년도, 2개의 숫자 표현
%% % 문자 표현 %x (x, 해당 list에 없는 어떤 것(any))

주요 형식 위주로 한 번 읽어보고 나머지는 필요할 때 찾아보자.

(%x => 거의 안쓰는 것 같다, 어떨 때 필요한지 아직 모르겠다.)

 

2. SUBSTR(COLUMN명, 1(START), 10(EXTRACT LENGTH))

: 긴 날짜 데이터 형식을 SUBSTR을 이용해 문자열 길이 지정, 순서가 같은 상위 문자열에서 하위 문자열을 추출할 때 사용 가능.

(SUBSTR = SUBSTRING = MID와 동일)

 

[참고]

STR_TO_DATE(문자열, 포맷)

: 포맷 형식의 문자형의 데이터를 날짜형으로 변환해주는 함수

(위와 문제에서와 같이 전체 COLUMN을 바꾸지 못하고 문자열 하나씩만 변환해줄 수 있다.)

STR_TO_DATE('2O230211', YYYYMMDD)
-- 2023-02-11

 

+) [MySQL 주석(Comments) 처리법]

# 또는

-- : (double-dash, 다음에 공백이나 tab, newline 등 필수)

/* */ : 여러줄 Comments

 

 

참고 자료

MySQL 12.7 Date and Time Functions - 날짜 추가, 날짜수 세기, 년/월/일만 따로 추출하기 등 다양한 날짜 예제 볼 수 있음!

 

MySQL :: MySQL 8.0 Reference Manual :: 12.7 Date and Time Functions

12.7 Date and Time Functions This section describes the functions that can be used to manipulate temporal values. See Section 11.2, “Date and Time Data Types”, for a description of the range of values each date and time type has and the valid formats

dev.mysql.com

 

정미나, 「SQL 개발자」, SD에듀, p96

 

 

 

🙂 공부하면서 정리한 글입니다. 잘못된 점이 있다면 피드백 남겨주세요.