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

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 値から日付部分だけを取り出せば、時刻に関係なく同日のレコードを正確に絞り込めます。ログやサインイン履歴など、日別にデータを集計したい場面でぜひ活用してください。

  1. 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. レコー

  2. MySQLのDATE_FORMAT関数でタイムスタンプから月番号を取得する方法

    MySQLでタイムスタンプ型のカラムから「月の番号だけ」を取り出したい場合、DATE_FORMAT() 関数を使うのが便利です。書式指定子 %m を指定することで、01〜12の形式で月番号を文字列として取得できます。この記事では、実際にテーブルを作成し、データを登録して、月番号を抽出するまでの一連の手順をサンプルコード付きで解説します。1. サンプルテーブルの作成まず、TIMESTAMP型のカラムを持つテーブルを作成します。mysql> create table DemoTable1999 ( ArrivalDate timestamp ); Query OK,