일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 빅분기1유형
- 데이터자격증
- 빅분기 실기
- 데이터리안
- 컨버티드
- 우금캐면접
- 투자마인드
- 데이터넥스트레벨챌린지
- 통계독학
- 메타코드m
- 빅데이터분석기사실기
- 빅데이터분석기사
- sql
- 투자도서
- 빅분기실기
- MySQL
- 데이터분석마인드셋
- 메타코드
- BNK저축은행
- 우리금융캐피탈
- 우금캐
- 우리금융캐피탈면접
- 빅데이터분석기사 실기
- 정처기
- 데이터분석전문가
- 데이터분석
- 실기1유형
- 빅분기
- 데이터분석가
- boostcourse
- Today
- Total
하파와 데이터
[SQL이론] DATE 형태 변형, 일자 변경 본문

DATE 형태 변형
MY SQL에서 자주보는 날짜 형식인 DATETIME타입은 YYYY-MM-DD hh:mm:ss 형식으로 나타난다.
초단위까지 있는 날짜를 BETWEEN 등으로 구간으로 설정한다면
DATETIME 그대로 사용하는데 큰 문제가 없는 경우도 있으나,
문제에서 연/월/일 까지만 출력하라고 요청할 때가 있다.
이럴때, DATE 또는 DATE_FORMAT('날짜컬럼','형식)을 입력해서 이를 수정할 수 있다.
DATE 타입은 YYYY-MM-DD의 형식을 가진다.
만일 DAY라는 컬럼의 값이 '2023-08-08 01:48:10'라고 가정할때,
DATE(DAY) 는 '2023-08-08'이 된다.
만일, 08-AUG-23으로 표현하거나, 다른 형식의 모양으로 연월일을 표시하고 싶다면
DATE_FORMAT()함수를 활용해야한다.
DATE_FORMAT('날짜컬럼', '형식')의 구성인데, 형식은 아래의 표를 참고하여 내가 원하는 형식으로 만들 수 있다.
-- 날짜컬럼과 형식 사이에는 꼭!! 쉼표가 들어가야한다. 쉼표를 잊고서 나온 오류가 몇번째인지...
예를들어 DAY의 값을 영국식 표기 처럼 'AUG-08-23'으로 표기하고 싶다면
SELECT DATE_FORMAT(DAY, '%b-%d-%y)
FROM DT
위와같이 입력을 하면 내가 원하는 형식으로 연월일을 구성할 수 있다.
SpecifierDescription
%a | Abbreviated weekday name (Sun..Sat) |
%b | Abbreviated month name (Jan..Dec) |
%c | Month, numeric (0..12) |
%D | Day of the month with English suffix (0th, 1st, 2nd, 3rd, …) |
%d | Day of the month, numeric (00..31) |
%e | Day of the month, numeric (0..31) |
%f | Microseconds (000000..999999) |
%H | Hour (00..23) |
%h | Hour (01..12) |
%I | Hour (01..12) |
%i | Minutes, numeric (00..59) |
%j | Day of year (001..366) |
%k | Hour (0..23) |
%l | Hour (1..12) |
%M | Month name (January..December) |
%m | Month, numeric (00..12) |
%p | AM or PM |
%r | Time, 12-hour (hh:mm:ss followed by AM or PM) |
%S | Seconds (00..59) |
%s | Seconds (00..59) |
%T | Time, 24-hour (hh:mm:ss) |
%U | Week (00..53), where Sunday is the first day of the week; WEEK() mode 0 |
%u | Week (00..53), where Monday is the first day of the week; WEEK() mode 1 |
%V | Week (01..53), where Sunday is the first day of the week; WEEK() mode 2; used with %X |
%v | Week (01..53), where Monday is the first day of the week; WEEK() mode 3; used with %x |
%W | Weekday name (Sunday..Saturday) |
%w | Day of the week (0=Sunday..6=Saturday) |
%X | Year for the week where Sunday is the first day of the week, numeric, four digits; used with %V |
%x | Year for the week, where Monday is the first day of the week, numeric, four digits; used with %v |
%Y | Year, numeric, four digits |
%y | Year, numeric (two digits) |
%% | A literal % character |
%x | x, for any “x” not listed above |
날짜 함수의 형식에 대해서는 아래 링크를 참조하면 더 많은 내용들을 확인할 수 있다.
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
DATE 날짜 조정
SQL문제를 풀다보면, 조건을 지정해야하는데
그 조건이 주어진 날의 앞 뒷날을 포함해야하는 등
주어진 날짜에서 며칠을 이동시켜야하는 경우가 종종 발생한다.
예를들어, 아래와 같은 테이블이 있다고 가정을 하고, 아래의 결과값처럼 MOVING AVG(이동평균)을 구하는 문제를 마주한다면 우리는 어떻게 해야하겠는가
DAY | TEMP | LOCATION |
2023-08-01 | 35 | SEOUL |
2023-08-02 | 36 | SEOUL |
2023-08-03 | 34 | SEOUL |
2024-08-04 | 37 | SEOUL |
결과값
DAY | TEMP | MOVING_AVG | LOCATION |
2023-08-01 | 35 | (35+36)/2 | SEOUL |
2023-08-02 | 36 | (35+36+34)/3 | SEOUL |
2023-08-03 | 34 | (36+34+47)/3 | SEOUL |
2024-08-04 | 37 | (34+37+24)/3 | SEOUL |
우리는 현재 주어진 DATE값에서 하루 전날부터 다음날까지의 TEMP를 더하고 그 값의 평균을 출력하는 값을 만들어내야한다.
SELECT DAY
, TEMP
, (SELECT AVG(S2.TEMP)
FROM seoul_temp S2
WHERE S2.DATE
BETWEEN DATE_SUB(S1.DAY, INTERVAL 1 DAY)
AND DATE_ADD(S1.DAY, INTERVAL 1 DAY)
)AS MOVING_AVG
FROM seoul_temp S1
ORDER BY DAY
앞서 사용한 것처럼, 날짜를 변경하기 위해선 DATE_SUB(날짜, INTERVAL 변경하고 싶은 연/월/일/시/분/초)를 입력한다.
중요한건, 날짜 컬럼 뒤! 콤마!!
'Development > SQL' 카테고리의 다른 글
다시 연습하는 SQL-0 (1) | 2024.12.28 |
---|---|
SQL에서 데이터 몇개만 보기 (0) | 2024.10.18 |
[SQL 이론] 숫자형, 문자형 기본함수 (0) | 2023.08.07 |
SQL - PIVOT 변환하기 (1) | 2023.07.31 |
SQL 소수점 처리 (0) | 2023.07.22 |