MySQLで今日の日付と一致するレコードを取得する方法(CURDATE()の使い方)
MySQLで「今日の日付」と一致するデータを取得したい場合、組み込み関数 CURDATE() を使用します。CURDATE() は現在の日付のみを返し、時刻は含みません。この関数を使うことで、同じ日のレコードだけを簡単に抽出できます。
基本構文
SELECT yourColumnName1, yourColumnName2, ......, yourColumnNameN,
DATE_FORMAT(yourDateColumnName, '%Y-%m-%d')
FROM yourTableName
WHERE DATE(yourDateColumnName) = CURDATE();ポイントは、日付カラムに DATE() 関数を適用して時刻部分を切り捨て、CURDATE() の結果と比較している点です。datetime 型のカラムには時刻情報が含まれるため、この処理が必要になります。
動作確認用テーブルの作成
それでは、実際にテーブルを作成して動作を確認してみましょう。まず、datetime 型のカラムを持つテーブルを作成します。
mysql> CREATE TABLE GmailSignIn
-> (
-> UserId int,
-> UserName varchar(200),
-> DateOfSignIn datetime
-> );
Query OK, 0 rows affected (1.56 sec)テストデータの挿入
次に、INSERT コマンドを使っていくつかのレコードを挿入します。ここでは現在日を 2018-12-06 としています。今日の日付・翌日・前日のデータを混ぜて登録することで、抽出結果が分かりやすくなります。
mysql> INSERT INTO GmailSignIn VALUES(222111,'John',now()); Query OK, 1 row affected (0.15 sec) mysql> INSERT INTO GmailSignIn VALUES(333222,'Johnson',curdate()); Query OK, 1 row affected (0.18 sec) mysql> INSERT INTO GmailSignIn VALUES(444333,'Carol',date_add(curdate(),interval 1 day)); Query OK, 1 row affected (0.13 sec) mysql> INSERT INTO GmailSignIn VALUES(555444,'David',date_add(curdate(),interval -1 day)); Query OK, 1 row affected (0.83 sec)
全レコードの表示
SELECT 文ですべてのレコードを確認してみます。
mysql> SELECT * FROM GmailSignIn;
実行結果は以下の通りです。
+--------+----------+---------------------+ | UserId | UserName | DateOfSignIn | +--------+----------+---------------------+ | 222111 | John | 2018-12-06 19:13:30 | | 333222 | Johnson | 2018-12-06 00:00:00 | | 444333 | Carol | 2018-12-07 00:00:00 | | 555444 | David | 2018-12-05 00:00:00 | +--------+----------+---------------------+ 4 rows in set (0.00 sec)
今日の日付のレコードだけを抽出するクエリ
ここからが本題です。日付が「今日」と一致するレコードのみを抽出し、さらに DATE_FORMAT() で整形した日付も表示してみましょう。
mysql> SELECT UserId, UserName, DateOfSignIn,
-> DATE_FORMAT(DateOfSignIn, '%Y-%m-%d')
-> FROM GmailSignIn
-> WHERE DATE(DateOfSignIn) = CURDATE();実行結果:
+--------+----------+---------------------+---------------------------------------+ | UserId | UserName | DateOfSignIn | DATE_FORMAT(DateOfSignIn, '%Y-%m-%d') | +--------+----------+---------------------+---------------------------------------+ | 222111 | John | 2018-12-06 19:13:30 | 2018-12-06 | | 333222 | Johnson | 2018-12-06 00:00:00 | 2018-12-06 | +--------+----------+---------------------+---------------------------------------+ 2 rows in set (0.00 sec)
結果を見ると、時刻が 19:13:30 の John と 00:00:00 の Johnson の両方が抽出されています。これは WHERE 句で DATE() 関数により時刻部分を無視して日付だけを比較しているためです。翌日の Carol や前日の David のレコードは除外されていますね。
まとめ
MySQL で今日の日付のレコードを取得するには、WHERE DATE(日付カラム) = CURDATE() という条件式が便利です。DATE() 関数で datetime 値から日付部分だけを取り出せば、時刻に関係なく同日のレコードを正確に絞り込めます。ログやサインイン履歴など、日別にデータを集計したい場面でぜひ活用してください。
-
MySQLで日付から曜日名を取得する方法(DAYNAME関数の使い方)
MySQLで日付に対応する曜日名を取得するには?MySQLで日付データから曜日名(Sunday、Mondayなど)を取得したい場合は、DAYNAME()関数を使用します。この記事では、実際にテーブルを作成し、DAYNAME()関数を使って曜日名を取得する手順を解説します。1. テーブルを作成するまず、出荷日(ShippingDate)を格納するテーブルを作成しましょう。mysql> create table DemoTable1954 ( ShippingDate date ); Query OK, 0 rows affected (0.00 sec)2. レコー
-
MySQLのDATE_FORMAT関数でタイムスタンプから月番号を取得する方法
MySQLでタイムスタンプ型のカラムから「月の番号だけ」を取り出したい場合、DATE_FORMAT() 関数を使うのが便利です。書式指定子 %m を指定することで、01〜12の形式で月番号を文字列として取得できます。この記事では、実際にテーブルを作成し、データを登録して、月番号を抽出するまでの一連の手順をサンプルコード付きで解説します。1. サンプルテーブルの作成まず、TIMESTAMP型のカラムを持つテーブルを作成します。mysql> create table DemoTable1999 ( ArrivalDate timestamp ); Query OK,