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

【MySQL】datetime型の列が今日の日付と一致するレコードを取得するクエリの書き方

MySQLで日時(datetime型)の列が「今日の日付」と一致するレコードだけを抽出したい場合、DATE(NOW()) を活用すると簡単に実現できます。以下に基本的な構文を示します。

select *from yourTableName where DATE(yourColumnName)=DATE(NOW());

なぜ DATE() 関数が必要なのか

datetime型の列には「日付 + 時刻」が保存されているため、単純に NOW() と比較すると時刻まで完全に一致しない限りヒットしません。そこで DATE() 関数で日付部分だけを取り出して比較することで、時刻に関係なく同じ日のレコードを取得できるのです。

サンプルテーブルの作成

まず、動作確認用のテーブルを作成します。

mysql> create table DemoTable706 (
    UserId varchar(100),
    UserName varchar(100),
    UserSignupDate datetime
);
Query OK, 0 rows affected (0.57 sec)

続いて、insertコマンドでサンプルレコードを挿入します。

mysql> insert into DemoTable706 values('John1@gmail.com','John','2019-01-31 12:45:22');
Query OK, 1 row affected (0.24 sec)
mysql> insert into DemoTable706 values('Chris123@gmail.com','Chris','2019-07-22 10:05:02');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable706 values('12Robert@gmail.com','Robert','2019-06-22 11:25:22');
Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable706 values('DavidM@gmail.com','David','2019-07-22 00:00:02');
Query OK, 1 row affected (0.12 sec)

登録済みレコードの確認

select文ですべてのレコードを表示してみましょう。

mysql> select *from DemoTable706;

実行すると、次のような結果が得られます。

+--------------------+----------+---------------------+
| UserId             | UserName | UserSignupDate      |
+--------------------+----------+---------------------+
| John1@gmail.com    | John     | 2019-01-31 12:45:22 |
| Chris123@gmail.com | Chris    | 2019-07-22 10:05:02 |
| 12Robert@gmail.com | Robert   | 2019-06-22 11:25:22 |
| DavidM@gmail.com   | David    | 2019-07-22 00:00:02 |
+--------------------+----------+---------------------+
4 rows in set (0.00 sec)

今日の日付のレコードを取得するクエリ

それでは本題です。UserSignupDate列の日付部分が現在の日付と一致するレコードを取得するには、次のクエリを実行します。

mysql> select *from DemoTable706 where DATE(UserSignupDate)=DATE(NOW());

実行結果は以下のとおりです。時刻が異なっていても、日付が一致する2件のレコードが正しく抽出されています。

+--------------------+----------+---------------------+
| UserId             | UserName | UserSignupDate      |
+--------------------+----------+---------------------+
| Chris123@gmail.com | Chris    | 2019-07-22 10:05:02 |
| DavidM@gmail.com   | David    | 2019-07-22 00:00:02 |
+--------------------+----------+---------------------+
2 rows in set (0.00 sec)

まとめ

datetime型の列から「今日」のデータを取り出す場合は、WHERE DATE(列名) = DATE(NOW()) の形で日付部分同士を比較するのがポイントです。この書き方を覚えておけば、日別の集計や当日分のログ抽出など、さまざまな場面で応用できます。

  1. MySQLでvarchar型の日付レコードを現在の日付と比較する方法

    MySQLでは、varchar型として保存された日付を現在の日付と比較する場合、STR_TO_DATE()関数を活用するのが効果的です。文字列形式の日付をそのまま比較すると、期待通りの結果が得られないことがあるため、まず適切な日付型に変換してから比較を行いましょう。基本構文varchar型の日付カラムと現在の日付を比較する際の基本的な構文は以下の通りです。select * from yourTableName where str_to_date(yourColumnName,yourFormatSpecifier) > curdate();サンプルテーブルの作成まず、varchar型の日

  2. MySQLクエリで現在の日付が特定の日付範囲内に含まれるかどうかを確認する方法

    MySQLでは、CURDATE()関数と比較演算子を組み合わせることで、現在の日付が特定の日付範囲(開始日〜終了日)に含まれているかどうかを簡単に判定できます。この記事では、実際のサンプルコードを使いながら手順を解説します。 サンプルテーブルの作成 まず、開始日(StartDate)と終了日(EndDate)という2つのDATE型カラムを持つテーブルを作成しましょう。 mysql> create table DemoTable1448     -> (     -> StartDate date,