Today I Learned (TIL)/SQL

[TIL] SQL 챌린지 - 4회차

신짜린 2024. 7. 24. 14:58

1. 날짜형 자료 기본

 협정시계시(Universal Time Coordinated)는 1972년에 공표된 국제적인 표준 시를 말한다. 한국은 UTC+9시간에 속하므로 기준시보다 9시간 빠르다.

함수 설명
CURDATE 현재 서버 날짜
CURTIME 현재 서버 시간
NOW 현재 서버 날짜 및 시
DATETIME YYYY-MM-DD HH:MM
TIME HH:MM:SS
DATE YYYY-MM-DD
YEAR YYYY or YY
TIMESTAMP YYYY-MM_DD HH:MM
구분 DATETIME TIMESTAMP
용도 시간대를 임의로 설정 REALTIME 저장이 필요할 때(라이브 서비스)
시간대 그대로 저장 서버의 시간대로 저장
범위 1000-01-01 ~ 9999-12-31 1970-01-01 00:00:00 ~ 2038-01-19 03:14:07
자동 업데이트 X (DDL) DEFAULT CURRENT_TIMESTAMP 옵션 지원

 

2. 날짜 변환 & 가공 함수

- 날짜 변환 및 가공

함수 설명
YEAR('YYYY-MM-DD') 년도 추출
MONTH('YYYY-MM-DD') 월 추출
DAY('YYYY-MM-DD') 날짜 추출
DAYNAME('YYYY-MM-DD') 요일의 이름 반환
WEEK('YYYY-MM-DD') 주 수 반환(1 ~ 53주)
DAYOFWEEK('YYYY-MM-DD') 요일의 번호 반환(1 일요일 ~ 7 토요일)

 

- 날짜 형변환

함수 설명
DATE_FORMAT(NOW(), '%Y-%m-%d') 날자형 → 날짜형 변환
STR_TO_DATE('YYYY-MM-DD', '%Y-%m-%d') 문자형 날짜형 변환

 

- 두 날짜 차이 계산

함수 설명
DATEDIFF('YYYY-MM-DD', 'YYYY-MM-DD') 두 날짜 차이(시간정보 무시)
TIMESTAMPDIFF(DAY, 'YYYY-MM-DD', 'YYYY-MM-DD') 두 시간대 차이(지정된 단위 존재 - SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, or YEAR) 
CONVERT_TZ(NOW(), '+00:00', +09:00) UTC 기반 시간대 변경
-- EDA 창시자는 1961년 5월 6일에 태어났다. 지금은 몇 살일까?
-- 방법 1(문제는 윤년을 고려하지 않아 정확하지 않음)
SELECT DATADIFF(CURRENT_DATE(),'1961-05-06')/365
-----------------------------------------------------------------------------------------------
-- 방법 2(년도계산 & 일별 만나이 계산: 생월일을 비교하여 넘지 않았으면 -1살)
SELECT TIMESTAMPDIFF(YEAR, '1961-05-06', CURDATE()) -
       (DATE_FORMAT(CURDATE(), '%m%d') < DATE_FORMAT('1961-05-06', '%m%d')) AS age;

 

- 날짜 및 시간 가공

함수 설명
DATE_ADD('YYYY-MM-DD', INTERVAL 10 DAY) 날짜 더하기
DATE_SUB('YYYY-MM-DD', INTERVAL 1 MONTH) 날짜 빼기
-- 현재 시간에서 2달 전 날짜 구하기
select date_sub(current_date() , interval 2 month)

'Today I Learned (TIL) > SQL' 카테고리의 다른 글

[TIL] SQL 베이직 - 4회차  (0) 2024.07.25
[TIL] SQL 베이직 - 3회차  (0) 2024.07.25
[TIL] SQL 챌린지 - 3회차  (0) 2024.07.22
[TIL] SQL 챌린지 - 2회차  (0) 2024.07.22
[TIL] SQL 베이직 - 2회차  (0) 2024.07.18