[MySQL] 날짜 관련 함수 [SELECT]

심진주·2024년 10월 7일
0

MySQL

목록 보기
7/10
post-thumbnail

📅 날짜 관련 함수

📚 날짜 관련 함수의 종류 (1)

함수 이름설명
NOW()시스템의 현재 시각을 리턴한다.
DATE_ADD(시간, INTERVAL 값 단위)주어진 시각을 기준으로 날짜를 연산하여 리턴한다.
DATE_FORMAT(시각, 형식)주어진 시각을 형식에 맞춰 변경한 결과를 리턴한다.
  • 출력형식 강제로 지정해야함.

date_add 함수에서 사용 가능한 단위

  • YEAR, MONTH, DAY, HOUR, MINITUE, SECOND

사용 예

  • 1년 후 👉 date_add(now(), INTERVAL 1YEAR)
  • 3개월 전 👉 date_add(now(), INTERVAL -3MONTH)

date_add 함수에서 컬럼을 기준으로 할때

  • date_add 함수를 사용하여 저장되어 있는 데이터를 기준으로 날짜 계산을 수행하는 경우
  • date_add(컬럼이름, INTERVAL 값단위)

📚 날짜 관련 함수의 종류 (1)

date_format 에서 사용가능한 키워드

기능키워드기능키워드
달 이름%MMM형식의 월%m
요일이름%WHH형식의 시간(24시간제)%H
YYYY형식의 년도%YH형식의 시간(24시간제)%k
YY형식의 년도%yHH형식의 시간(12시간제)%h
요일 이름의 약자%aMM형식의 분%i
DD형식의 날짜%dSS형식의 초%s
D형식의 날짜%eAM/PM%p

사용 예시

  • yy/mm/dd hh:mi:ss 형식의 날짜 얻기
SELECT DATE_FORMAT(NOW(),'%y/%m/%d%H:%i:%s');
+---------------------------------------+
| DATE_FORMAT(NOW(),'%y/%m/%d%H:%i:%s') |
+---------------------------------------+
| 24/10/0801:59:52                      |
+---------------------------------------+
1 row in set (0.00 sec)
  • 현재 시간(시스템상의 시간) 출력

예제 1 : NOW

  • 시스템의 현재 시각 조회하기
SELECT NOW();
+---------------------+
| NOW()               |
+---------------------+
| 2024-10-08 02:02:27 |
+---------------------+
1 row in set (0.00 sec)
  • 단순히 시스템의 현재 시각을 조회하는 경우 FROM 절을 명시하지 않는다.
  • 조회보다는 저장이나 수정할때 사용한다.

예제 2 : DATE_ADD

  • 현재 시점에서 100일 후 조회하기
SELECT DATE_ADD(NOW(), INTERVAL 100 DAY);
+-----------------------------------+
| DATE_ADD(NOW(), INTERVAL 100 DAY) |
+-----------------------------------+
| 2025-01-16 02:04:01               |
+-----------------------------------+
1 row in set (0.00 sec)
  • 현재 시점에서 7일 전 조회하기
SELECT DATE_ADD(NOW(), INTERVAL -7 DAY);
+----------------------------------+
| DATE_ADD(NOW(), INTERVAL -7 DAY) |
+----------------------------------+
| 2024-10-01 02:04:41              |
+----------------------------------+
1 row in set (0.00 sec)

예제 3 : DATE_FORMAT

  • 현재 시각을 yyyymmddhhmiss 형식의 14자리로 표현하시오.
SELECT DATE_FORMAT(NOW(), '%Y%m%d%H%i%s');
+------------------------------------+
| DATE_FORMAT(NOW(), '%Y%m%d%H%i%s') |
+------------------------------------+
| 20241008020625                     |
+------------------------------------+
1 row in set (0.00 sec)
  • 날짜처리가 14자리로 고정되기 때문에
  • 필요한 데이터 SUBSTRING으로 잘라쓰기 용이

✏️ 연습문제

student table

+--------+---------------------+--------+
| name   | birthdate           | height |
+--------+---------------------+--------+
| 전인하 | 1979-07-02 00:00:00 |    176 |
| 박미경 | 1984-05-16 00:00:00 |    168 |
| 김영균 | 1981-03-21 00:00:00 |    170 |
| 지은경 | 1980-04-12 00:00:00 |    161 |
| 임유진 | 1983-01-21 00:00:00 |    171 |
| 서재진 | 1985-11-29 00:00:00 |    186 |
| 이광훈 | 1981-09-13 00:00:00 |    175 |
| 류민정 | 1981-08-19 00:00:00 |    162 |
| 김진영 | 1982-06-06 00:00:00 |    164 |
| 오유석 | 1977-09-12 00:00:00 |    177 |
| 하나리 | 1985-01-09 00:00:00 |    160 |
| 윤진욱 | 1979-04-02 00:00:00 |    171 |
| 이동훈 | 1983-12-10 00:00:00 |    172 |
| 박동진 | 1985-11-24 00:00:00 |    182 |
| 김진경 | 1983-02-28 00:00:00 |    166 |
| 조명훈 | 1984-12-14 00:00:00 |    184 |
+--------+---------------------+--------+

연습문제 1

  • 1980년도 이후에 출생한 학생의 이름과 생년월일을 조회
SELECT name, birthdate FROM student WHERE DATE_FORMAT(birthdate, '%Y') >= 1980;
+--------+---------------------+
| name   | birthdate           |
+--------+---------------------+
| 박미경 | 1984-05-16 00:00:00 |
| 김영균 | 1981-03-21 00:00:00 |
| 지은경 | 1980-04-12 00:00:00 |
| 임유진 | 1983-01-21 00:00:00 |
| 서재진 | 1985-11-29 00:00:00 |
| 이광훈 | 1981-09-13 00:00:00 |
| 류민정 | 1981-08-19 00:00:00 |
| 김진영 | 1982-06-06 00:00:00 |
| 하나리 | 1985-01-09 00:00:00 |
| 이동훈 | 1983-12-10 00:00:00 |
| 박동진 | 1985-11-24 00:00:00 |
| 김진경 | 1983-02-28 00:00:00 |
| 조명훈 | 1984-12-14 00:00:00 |
+--------+---------------------+
13 rows in set (0.01 sec)

0개의 댓글