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

MySQL에서 이번 달 첫날 구하는 방법 총정리

MySQL에서 이번 달의 첫날 구하기

MySQL에서는 LAST_DAY() 함수와 DATE_SUB() 함수를 조합하면 이번 달의 첫날을 손쉽게 구할 수 있습니다. 아래 쿼리를 살펴보겠습니다.

mysql> SELECT DATE_SUB(LAST_DAY(NOW()), INTERVAL DAY(LAST_DAY(NOW())) - 1 DAY) AS 'FIRST DAY OF CURRENT MONTH';
+----------------------------+
| FIRST DAY OF CURRENT MONTH |
+----------------------------+
| 2017-10-01                 |
+----------------------------+
1 row in set (0.00 sec)

쿼리 동작 원리

이 쿼리가 작동하는 방식을 단계별로 살펴보면 다음과 같습니다.

  • NOW(): 현재 날짜와 시간을 반환합니다.
  • LAST_DAY(NOW()): 현재 달의 마지막 날짜를 반환합니다. 예를 들어 10월이라면 '2017-10-31'이 됩니다.
  • DAY(LAST_DAY(NOW())): 해당 월의 마지막 날짜에서 '일(day)' 부분만 추출합니다. 10월이면 31이 됩니다.
  • DATE_SUB(..., INTERVAL ... DAY): 마지막 날짜에서 (일수 - 1)만큼 빼서 그 달의 1일을 계산합니다.

더 간단한 대체 방법

DATE_FORMAT() 함수를 사용하면 훨씬 간결하게 같은 결과를 얻을 수 있습니다.

mysql> SELECT DATE_FORMAT(NOW(), '%Y-%m-01') AS 'FIRST DAY OF CURRENT MONTH';
+----------------------------+
| FIRST DAY OF CURRENT MONTH |
+----------------------------+
| 2017-10-01                 |
+----------------------------+
1 row in set (0.00 sec)

또한 문자열 연결 방식으로도 가능합니다.

mysql> SELECT CONCAT(YEAR(CURDATE()), '-', MONTH(CURDATE()), '-01') AS 'FIRST DAY OF CURRENT MONTH';

참고 사항

NOW() 대신 CURDATE()를 사용해도 동일한 결과를 얻을 수 있습니다. 두 함수 모두 현재 날짜를 기준으로 동작하지만, NOW()는 시간까지 포함하고 CURDATE()는 날짜만 반환한다는 차이가 있습니다. 이번 달 첫날을 구하는 용도로는 어느 쪽을 사용해도 무방합니다.