MySQLで現在の日付の月・日と比較してレコードを取得する方法
はじめに
MySQLで、現在の日付の「月」と「日」が一致するレコードだけを抽出したいケースはよくあります。例えば、記念日や誕生日のように年に関係なく同じ日付のデータを取得したい場合に便利です。このような場合には、MONTH()関数とDAY()関数を組み合わせて使用します。
ここでは、実際にテーブルを作成し、データを挿入して、現在の日付と月日を比較してレコードを取得する手順を解説します。
サンプルテーブルの作成
まず、記念日を格納するテーブルを作成します。
mysql> create table DemoTable1429
-> (
-> AnniversaryDate date
-> );
テストデータの挿入
次に、insert文を使ってテーブルにレコードを挿入します。
mysql> insert into DemoTable1429 values('2019-09-29');
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable1429 values('2018-09-27');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable1429 values('2016-09-28');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1429 values('2015-09-29');
Query OK, 1 row affected (0.12 sec)登録データの確認
select文で、テーブル内のすべてのレコードを表示してみましょう。
mysql> select * from DemoTable1429;
実行すると、以下のような結果が出力されます。
+-----------------+
| AnniversaryDate |
+-----------------+
| 2019-09-29 |
| 2018-09-27 |
| 2016-09-28 |
| 2015-09-29 |
+-----------------+
4 rows in set (0.00 sec)
現在の日付の確認
比較の基準となる現在の日付をcurdate()関数で確認します。
mysql> select curdate();
+------------+
| curdate() |
+------------+
| 2019-09-29 |
+------------+
1 row in set (0.00 sec)
この時点での現在日は「2019-09-29」です。
月と日を比較してレコードを取得するクエリ
現在の日付の「月」と「日」を比較して、該当するレコードを取得するクエリは以下のとおりです。
mysql> select * from DemoTable1429
-> where month(AnniversaryDate)=month(curdate())
-> and day(AnniversaryDate)=day(curdate());
実行結果は次のようになります。
+-----------------+
| AnniversaryDate |
+-----------------+
| 2019-09-29 |
| 2015-09-29 |
+-----------------+
2 rows in set (0.00 sec)
解説
このクエリでは、month()関数で日付から月を、day()関数で日を抽出し、それぞれcurdate()(現在の日付)の月・日と比較しています。年が異なっていても月日が一致する「2019-09-29」と「2015-09-29」の2件が取得できました。
この手法は、誕生日や記念日など、年を問わず毎年同じ日付に該当するデータを抽出したい場合に非常に役立ちます。
-
MySQLで現在の日付に登録したユーザー数を取得する方法
はじめに MySQLで「現在の日付に登録されたユーザーの数」を取得したい場合は、COUNT()関数とGROUP BY MONTH()を組み合わせます。現在の日付との比較には、CURRENT_DATE()(またはCURDATE())を使用します。 現在の日付を確認する まず、現在の日付を確認しておきましょう。CURDATE()関数を使うと、今日の日付を簡単に取得できます。 mysql> select curdate() ; +------------+ | curdate() | +------------+ | 2019-11-30 | +------------+ 1 row in
-
MySQLで現在の日付と翌日のレコードを条件に特定の列を抽出する方法
MySQLでは、CURDATE()関数を使うことで、現在の日付やその翌日に該当するレコードを簡単に抽出できます。この記事では、実際のサンプルを使いながら、現在の日付と翌日の出荷日を持つレコードから特定の列を選択して取得する方法を解説します。 1. 現在の日付を確認する まず、curdate()関数で現在の日付を取得してみましょう。 mysql> select curdate(); 実行すると、以下のような結果が表示されます。 +------------+ | curdate() | +------------+ | 2019-12-15 | +------------+ 1 row