Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 함수로 날짜 계산하는 방법: CURDATE(), YEAR(), MONTH(), DAY() 완벽 정리

MySQL에서 날짜를 계산하는 주요 함수

MySQL에서는 다양한 내장 함수를 활용해 날짜를 손쉽게 계산하고 추출할 수 있습니다. 대표적으로 사용되는 함수는 다음과 같습니다.

  • CURDATE() 함수 – 현재 시스템(컴퓨터)의 오늘 날짜를 반환합니다.
  • YEAR() 함수 – 지정한 날짜에서 연도(year) 값을 반환합니다.
  • MONTH() 함수 – 지정한 날짜에서 월(month) 값을 반환합니다.
  • DAY() 함수 – 지정한 날짜에서 일(day) 값을 반환합니다.
  • RIGHT() 함수 – 주어진 날짜 값에서 지정한 개수만큼의 문자를 오른쪽부터 반환합니다. 이 함수의 반환값을 비교하는 표현식은 1 또는 0으로 평가됩니다.

예제 테이블: Collegedetail

아래 함수들의 동작을 이해하기 위해 'Collegedetail'이라는 테이블의 데이터를 살펴보겠습니다.

mysql> Select * from Collegedetail;
+------+---------+------------+
| ID   | Country | Estb       |
+------+---------+------------+
| 111  | INDIA   | 2010-05-01 |
| 130  | INDIA   | 1995-10-25 |
| 139  | USA     | 1994-09-25 |
| 1539 | UK      | 2001-07-23 |
| 1545 | Russia  | 2010-07-30 |
+------+---------+------------+
5 rows in set (0.00 sec)

여러 날짜 함수를 조합한 조회 쿼리

다음 쿼리에서는 위에서 소개한 다양한 날짜 함수들을 한 번에 사용하여 날짜 정보를 계산했습니다.

mysql> Select ID, Estb, CURDATE(), YEAR(Estb), MONTH(Estb), DAY(Estb), (RIGHT(CURDATE(),5) < RIGHT(estb,5)) As 'Return' FROM Collegedetail;
+------+------------+------------+------------+-------------+-----------+--------+
| ID   | Estb       | CURDATE()  | YEAR(Estb) | MONTH(Estb) | DAY(Estb) | Return |
+------+------------+------------+------------+-------------+-----------+--------+
| 111  | 2010-05-01 | 2017-11-30 | 2010       | 5           | 1         | 0      |
| 130  | 1995-10-25 | 2017-11-30 | 1995       | 10          | 25        | 0      |
| 139  | 1994-09-25 | 2017-11-30 | 1994       | 9           | 25        | 0      |
| 1539 | 2001-07-23 | 2017-11-30 | 2001       | 7           | 23        | 0      |
| 1545 | 2010-07-30 | 2017-11-30 | 2010       | 7           | 30        | 0      |
+------+------------+------------+------------+-------------+-----------+--------+
5 rows in set (0.00 sec)

설립 연차(YEARS_OLD) 계산하기

아래 쿼리는 YEAR() 함수와 RIGHT() 함수를 조합하여 각 대학의 설립 후 경과 연수를 계산하는 예입니다. 현재 연도에서 설립 연도를 뺀 값에, 올해 기념일이 아직 지나지 않았으면 1을 추가로 빼주어 정확한 만 연차를 구할 수 있습니다.

mysql> Select ID, estb, CURDATE(),((YEAR(CURDATE())-YEAR(estb))-(RIGHT(CURDATE(),5)<RIGHT(estb,5))) AS 'YEARS_OLD' from collegedetail;
+------+------------+------------+-----------+
| ID   | estb       | CURDATE()  | YEARS_OLD |
+------+------------+------------+-----------+
| 111  | 2010-05-01 | 2017-11-30 | 7         |
| 130  | 1995-10-25 | 2017-11-30 | 22        |
| 139  | 1994-09-25 | 2017-11-30 | 23        |
| 1539 | 2001-07-23 | 2017-11-30 | 16        |
| 1545 | 2010-07-30 | 2017-11-30 | 7         |
+------+------------+------------+-----------+
5 rows in set (0.00 sec)

이처럼 MySQL의 날짜 관련 함수들을 적절히 조합하면 현재 날짜 확인은 물론, 특정 날짜의 연·월·일 추출, 그리고 두 날짜 사이의 경과 연수 계산까지 다양하게 처리할 수 있습니다.