MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLで前月の初日(1日)を取得する方法

MySQLで前月の初日を取得する基本クエリ

MySQLでは、CURDATE() 関数と INTERVAL 演算子、DATE_FORMAT() 関数を組み合わせることで、前月の初日(1日)を簡単に取得できます。以下のクエリを実行してみましょう。

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

クエリの仕組み

このクエリは、次の3つのステップで動作しています。

  • CURDATE():現在の日付を返します(例:2017-10-15)。
  • - INTERVAL 1 MONTH:現在の日付から1か月前の日付へ移動します(例:2017-09-15)。
  • DATE_FORMAT(..., '%Y-%m-01'):フォーマット指定子 %Y-%m で年と月を取り出し、日の部分を文字列として「01」に固定します。その結果、前月の1日が得られます。

別の方法:LAST_DAY関数を使う

LAST_DAY() 関数を利用すれば、2か月前の月末に1日を加算することでも、同じ結果が得られます。

mysql> SELECT LAST_DAY(CURDATE() - INTERVAL 2 MONTH) + INTERVAL 1 DAY AS 'FIRST DAY OF PREVIOUS MONTH';
+-----------------------------+
| FIRST DAY OF PREVIOUS MONTH |
+-----------------------------+
| 2017-09-01                  |
+-----------------------------+
1 row in set (0.00 sec)

この方法は、日付型のまま結果を受け取りたい場合に便利です。DATE_FORMAT() を使う方法は文字列として返されるため、用途に応じて使い分けるとよいでしょう。

まとめ

前月の初日を取得したい場合は、DATE_FORMAT(CURDATE() - INTERVAL 1 MONTH, '%Y-%m-01') が最もシンプルで分かりやすい方法です。レポート作成や月次集計など、月初を基準としたデータ処理の場面でぜひ活用してください。

  1. MySQLでテーブルの最初と最後のレコードを取得する方法【UNIONとLIMIT活用】

    MySQLで最初と最後のレコードを取得する基本手法MySQLでテーブルの最初のレコードと最後のレコードを同時に取得したい場合は、UNIONを使用します。UNIONは複数のSELECT文の結果を結合する構文で、「昇順で並べ替えた先頭1件」と「降順で並べ替えた先頭1件」を組み合わせることで、最初と最後のレコードを一度に取り出せます。また、LIMIT句を使うことで、取得するレコード数を指定できます。サンプルテーブルの作成まず、動作確認用のテーブルを作成しましょう。mysql> create table DemoTable694 ( EmployeeId int NOT NULL AUTO

  2. MySQLで日付データから月の初日と末日を取得する方法

    MySQLでは、日付型のカラムから「その月の最初の日」と「最後の日」を簡単に求めることができます。この記事では、実際にテーブルを作成し、サンプルデータを使いながら具体的な手順を解説します。1. テーブルの作成まず、日付を格納するためのテーブルを作成します。mysql> create table DemoTable -> ( -> DueDate date -> ); Query OK, 0 rows affected (0.73 sec)2. レコードの挿入次に、INSERT文を使ってテーブルにいくつかのレコードを挿入します。mysql>