MySQLで各月の初日(月初)を取得する方法をわかりやすく解説
MySQLでは、DATE_FORMAT() 関数を使用することで、datetime型のカラムから対応する各月の初日を簡単に抽出できます。フォーマット指定子に %Y-%m-01 を指定することで、年と月はそのままに、日付部分を「01」に固定した文字列を取得できます。
基本構文
SELECT DATE_FORMAT(yourDatetimeColumnName, '%Y-%m-01') AS anyVariableName
FROM yourTableName;
実際に試してみよう
1. テーブルを作成する
まず、動作を確認するためのサンプルテーブルを作成します。
mysql> CREATE TABLE getFirstDayOfMonth
-> (
-> DueDatetime datetime
-> );
Query OK, 0 rows affected (1.16 sec)
2. テストデータを挿入する
DATE_ADD() 関数を使って、現在日時から相対的な日付を持つレコードを複数挿入します。
mysql> INSERT INTO getFirstDayOfMonth VALUES(DATE_ADD(NOW(), INTERVAL 3 MONTH));
Query OK, 1 row affected (0.30 sec)
mysql> INSERT INTO getFirstDayOfMonth VALUES(DATE_ADD(NOW(), INTERVAL -3 MONTH));
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO getFirstDayOfMonth VALUES(DATE_ADD(NOW(), INTERVAL -2 MONTH));
Query OK, 1 row affected (0.18 sec)
mysql> INSERT INTO getFirstDayOfMonth VALUES(DATE_ADD(NOW(), INTERVAL -1 MONTH));
Query OK, 1 row affected (0.16 sec)
mysql> INSERT INTO getFirstDayOfMonth VALUES(DATE_ADD(NOW(), INTERVAL -4 MONTH));
Query OK, 1 row affected (0.10 sec)
3. 挿入されたデータを確認する
mysql> SELECT * FROM getFirstDayOfMonth;
出力結果
+---------------------+
| DueDatetime |
+---------------------+
| 2019-03-20 12:32:06 |
| 2018-09-20 12:32:16 |
| 2018-10-20 12:32:22 |
| 2018-11-20 12:32:28 |
| 2018-08-20 12:32:33 |
+---------------------+
5 rows in set (0.00 sec)
各月の初日を取得するクエリ
それでは、カラムに格納されている日付がどの月であっても、その月の初日を返すクエリを実行してみましょう。
mysql> SELECT DATE_FORMAT(DueDatetime, '%Y-%m-01') AS DateDemo
-> FROM getFirstDayOfMonth;
出力結果
+------------+
| DateDemo |
+------------+
| 2019-03-01 |
| 2018-09-01 |
| 2018-10-01 |
| 2018-11-01 |
| 2018-08-01 |
+------------+
5 rows in set (0.00 sec)
補足:別のアプローチ
DATE_FORMAT() 以外にも、MySQLには月の初日を取得する方法がいくつかあります。例えば、次のように DATE_SUB() と DAYOFMONTH() を組み合わせる方法もあります。
SELECT DATE_SUB(DueDatetime, INTERVAL DAYOFMONTH(DueDatetime) - 1 DAY) AS FirstDay
FROM getFirstDayOfMonth;
この方法では、日付から「その日の日にち − 1」分だけ差し引くことで、同じ月の1日を算出しています。DATE_FORMAT() の方がシンプルで可読性も高いため、通常はこちらの利用をおすすめします。
-
PHPで週の最初の日(週初め)を取得する方法
PHPで現在の週の最初の日を取得したい場合、date() 関数と strtotime() 関数を組み合わせることで簡単に実現できます。以下に具体的なコード例を紹介します。例1:今週の最初の日を取得する<?php $res = date(l - d/m/Y, strtotime(this week)); echo First day = , $res; ?>出力結果上記のコードを実行すると、次のような出力が得られます。First day = Monday - 09/12/2019解説strtotime(this week) は、現在の週の開始日時を表すタイムスタンプを
-
Pythonで月の最終日を取得する方法【calendarモジュールの使い方】
Pythonでは、標準ライブラリのcalendarモジュールを使うことで、指定した月の最終日(末日)を簡単に取得できます。calendarモジュールにはmonthrange(year, month)という便利なメソッドが用意されており、指定した年・月の「1日の曜日」と「その月の日数」をタプルで返します。この情報を組み合わせれば、月の最終日の日付や曜日を自在に求めることが可能です。 monthrange()メソッドの基本 calendar.monthrange(year, month)は、以下の2つの値を返します。 第1戻り値:その月の1日の曜日(0が日曜日、6が土曜日) 第2戻り値:その月の