✏️ 문제
✏️ 정답
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
# 또는
-- : (double-dash, 다음에 공백이나 tab, newline 등 필수)
/* */ : 여러줄 Comments
참고 자료
MySQL 12.7 Date and Time Functions - 날짜 추가, 날짜수 세기, 년/월/일만 따로 추출하기 등 다양한 날짜 예제 볼 수 있음!
정미나, 「SQL 개발자」, SD에듀, p96
🙂 공부하면서 정리한 글입니다. 잘못된 점이 있다면 피드백 남겨주세요.
'프로그래밍 > SQL' 카테고리의 다른 글
SQLD 합격 후기, 공부 방법 (+ 생활코딩 MySQL 강의 정리) (0) | 2023.04.10 |
---|---|
[SQL 고득점 Kit] 이름에 el이 들어가는 동물 찾기 / 대소문자 구별없이 LIKE (0) | 2023.02.12 |
[SQL 고득점 Kit - SUM] 중복 제거하기 / NULL 값 제거 (0) | 2023.01.19 |
[SQL 고득점 Kit - SELECT] 오프라인/온라인 판매 데이터 통합하기, UNION, IFNULL() (1) | 2023.01.12 |
[SQL 고득점 Kit - SELECT] 서울에 위치한 식당 목록 출력하기 / 소수점 자리수 지정하는 다양한 방법 / INNER JOIN, AVG, GROUP BY LIKE (0) | 2023.01.10 |