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

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

MySQLでは、日付型のカラムから「その月の最初の日」と「最後の日」を簡単に求めることができます。この記事では、実際にテーブルを作成し、サンプルデータを使いながら具体的な手順を解説します。

1. テーブルの作成

まず、日付を格納するためのテーブルを作成します。

mysql> create table DemoTable
    -> (
    -> DueDate date
    -> );
Query OK, 0 rows affected (0.73 sec)

2. レコードの挿入

次に、INSERT文を使ってテーブルにいくつかのレコードを挿入します。

mysql> insert into DemoTable values('2019-01-11');
Query OK, 1 row affected (0.08 sec)
mysql> insert into DemoTable values('2019-04-19');
Query OK, 1 row affected (0.14 sec)

3. 登録データの確認

SELECT文ですべてのレコードを表示して、正しく登録されているか確認しましょう。

mysql> select *from DemoTable;

実行すると、以下のような結果が表示されます。

+------------+
| DueDate    |
+------------+
| 2019-01-11 |
| 2019-04-19 |
+------------+
2 rows in set (0.00 sec)

4. 月の初日と末日を表示するクエリ

ここが本題です。月の初日は DATE_FORMAT() 関数を使って「%Y-%m-01」の形式で日部分を強制的に「01」にすることで求められます。一方、末日は LAST_DAY() 関数を使えば、その月の最終日(大の月・小の月・うるう年も自動的に考慮)を一発で取得できます。

mysql> select date_format(DueDate,'%Y-%m-01') as FirstDayOfMonth,last_day(DueDate) as LastDayOfMonth from DemoTable;

実行結果は以下のとおりです。

+-----------------+----------------+
| FirstDayOfMonth | LastDayOfMonth |
+-----------------+----------------+
| 2019-01-01      | 2019-01-31     |
| 2019-04-01      | 2019-04-30     |
+-----------------+----------------+
2 rows in set (0.00 sec)

ポイントまとめ

  • DATE_FORMAT(DueDate, '%Y-%m-01'):年と月は元の日付から取得し、日の部分を「01」に固定することで月初日を算出します。
  • LAST_DAY(DueDate):対象の日付が属する月の最終日を返します。2月の28日・29日や30日までの月なども自動判定されるため、月末処理に非常に便利です。

この2つの関数を組み合わせることで、請求書の締め日計算や月次レポートの集計期間の設定など、さまざまな業務シーンで活用できます。

  1. MySQLで現在の日付の月・日と比較してレコードを取得する方法

    はじめにMySQLで、現在の日付の「月」と「日」が一致するレコードだけを抽出したいケースはよくあります。例えば、記念日や誕生日のように年に関係なく同じ日付のデータを取得したい場合に便利です。このような場合には、MONTH()関数とDAY()関数を組み合わせて使用します。ここでは、実際にテーブルを作成し、データを挿入して、現在の日付と月日を比較してレコードを取得する手順を解説します。サンプルテーブルの作成まず、記念日を格納するテーブルを作成します。mysql> create table DemoTable1429    -> ( &n

  2. 【MySQL】日付レコードから曜日を減算し、曜日名とともに結果を表示する方法

    はじめにMySQLで保存された日付レコードから、その週の開始日(月曜日)を計算して減算し、曜日名とともに結果を表示したい場合があります。このような処理には DATE_FORMAT() 関数を使用します。SUBDATE() と WEEKDAY() を組み合わせることで、各日付が属する週の月曜日の日付を「Mon 19 Oct」のような形式で取得できます。以下、具体的な手順をサンプルコードとともに解説します。1. テーブルの作成まず、日付を文字列として格納するテーブルを作成します。mysql> create table DemoTable1820 ( AdmissionDate