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

MySQL에서 특정 월의 일수(날짜 수) 구하는 방법 – LAST_DAY 함수 완벽 정리

MySQL에서 특정 달이 며칠까지 있는지, 즉 해당 월의 일수를 구하고 싶을 때가 있습니다. 이럴 때 가장 간단하고 확실한 방법은 LAST_DAY() 함수와 DAY() 함수를 조합하는 것입니다.

핵심 문법

월의 일수를 구하려면 아래 문법을 사용합니다.

SELECT DAY(LAST_DAY(yourColumnName)) AS anyVariableName FROM yourTableName;

여기서 각 함수의 역할은 다음과 같습니다.

  • LAST_DAY(date) : 입력된 날짜가 속한 달의 마지막 날짜를 반환합니다. 예를 들어 '2019-01-15'를 넣으면 '2019-01-31'이 반환됩니다.
  • DAY(date) : 날짜에서 '일(day)' 부분만 추출합니다. LAST_DAY의 결과인 월말 날짜에 DAY를 적용하면 곧 그 달의 일수가 됩니다.

예제 테이블 생성하기

문법을 실제로 이해하기 위해 먼저 테이블을 생성해 보겠습니다. 테이블 생성 쿼리는 다음과 같습니다.

mysql> create table DaysInaGivenMonth
-> (
-> MonthName datetime
-> );
Query OK, 0 rows affected (1.62 sec)

샘플 데이터 삽입하기

INSERT 명령으로 현재 시점부터 과거 5개월간의 날짜 데이터를 넣어 보겠습니다.

mysql> insert into DaysInaGivenMonth values(now());
Query OK, 1 row affected (0.24 sec)

mysql> insert into DaysInaGivenMonth values(date_add(now(),interval -1 month));
Query OK, 1 row affected (0.16 sec)

mysql> insert into DaysInaGivenMonth values(date_add(now(),interval -2 month));
Query OK, 1 row affected (0.10 sec)

mysql> insert into DaysInaGivenMonth values(date_add(now(),interval -3 month));
Query OK, 1 row affected (0.20 sec)

mysql> insert into DaysInaGivenMonth values(date_add(now(),interval -4 month));
Query OK, 1 row affected (0.23 sec)

mysql> insert into DaysInaGivenMonth values(date_add(now(),interval -5 month));
Query OK, 1 row affected (0.15 sec)

저장된 데이터 확인하기

SELECT 문으로 테이블의 모든 레코드를 조회합니다.

mysql> select *from DaysInaGivenMonth;

실행 결과는 다음과 같습니다.

+---------------------+
| MonthName           |
+---------------------+
| 2019-01-01 21:34:26 |
| 2018-12-01 21:34:55 |
| 2018-11-01 21:35:14 |
| 2018-10-01 21:35:20 |
| 2018-09-01 21:35:23 |
| 2018-08-01 21:35:27 |
+---------------------+
6 rows in set (0.00 sec)

월별 일수 조회 쿼리 실행

이제 위에 저장된 각 월의 일수를 계산하는 쿼리는 다음과 같습니다.

mysql> select DAY(LAST_DAY(MonthName)) as DaysInMonth from DaysInaGivenMonth;

실행 결과는 아래와 같습니다.

+-------------+
| DaysInMonth |
+-------------+
| 31          |
| 31          |
| 30          |
| 31          |
| 30          |
| 31          |
+-------------+
6 rows in set (0.00 sec)

결과 분석

결과를 날짜 데이터와 대조해 보면 정확하게 계산된 것을 확인할 수 있습니다.

  • 2019년 1월 → 31일
  • 2018년 12월 → 31일
  • 2018년 11월 → 30일
  • 2018년 10월 → 31일
  • 2018년 9월 → 30일
  • 2018년 8월 → 31일

이처럼 DAY(LAST_DAY(...)) 조합은 윤년(2월 29일)이나 월별 일수 차이를 자동으로 처리해 주기 때문에, 별도의 조건문 없이 항상 정확한 결과를 얻을 수 있다는 큰 장점이 있습니다.