MySQLクエリで日付リストから今日の日付のレコードを取得する方法
概要
datetime型のカラムに保存された日付データの中から、今日の日付に該当するレコードを抽出する方法を解説します。ここでは、現在の日付を「2019-07-22」として説明を進めます。
テーブルの作成
まず、サンプル用のテーブルを作成します。datetime型の「ShippingDate(出荷日)」カラムを持つテーブルを定義しましょう。
mysql> create table DemoTable705 (ShippingDate datetime);
Query OK, 0 rows affected (0.67 sec)
レコードの挿入
INSERTコマンドを使って、いくつかのレコードをテーブルに追加します。
mysql> insert into DemoTable705 values('2019-01-21 23:59:00');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable705 values('2019-07-22 00:00:30');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable705 values('2019-07-21 12:01:30');
Query OK, 1 row affected (0.44 sec)登録データの確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> select *from DemoTable705;
以下の出力が得られます。
+---------------------+
| ShippingDate |
+---------------------+
| 2019-01-21 23:59:00 |
| 2019-07-22 00:00:30 |
| 2019-07-21 12:01:30 |
+---------------------+
3 rows in set (0.00 sec)
今日の日付のレコードを取得するクエリ
日付のリストから現在の日付に一致するレコードを取得するには、DATE()関数とCURDATE()関数を組み合わせて使用します。DATE()関数でdatetime値から日付部分のみを抽出し、CURDATE()関数が返す今日の日付と比較することで、時刻に関係なく日付が一致するレコードを抽出できます。
mysql> select *from DemoTable705 where date(ShippingDate)=CURDATE();
実行結果は以下のとおりです。
+---------------------+
| ShippingDate |
+---------------------+
| 2019-07-22 00:00:30 |
+---------------------+
1 row in set (0.00 sec)
ポイント解説
WHERE句で「ShippingDate = CURDATE()」と直接比較すると、datetime型には時刻情報が含まれているため、時刻が00:00:00のレコードしか一致しません。DATE()関数で日付部分だけを取り出して比較することで、当日の日付を持つすべてのレコードを正確に取得できます。なお、大量のデータを扱う場合はDATE()関数の使用がインデックスを利用できなくなる点に注意し、範囲指定(ShippingDate >= 今日の0時 かつ < 翌日の0時)で検索する方法も検討するとよいでしょう。
-
MySQLで当日の00:00から現在時刻までのレコードを抽出するクエリの書き方
はじめにMySQLで「今日の日付の午前0時(00:00)から現在時刻まで」のレコードを取得したいケースはよくあります。例えば、現在の日時が 2019-09-14 08:50:10 である場合、2019-09-14 00:00:00 から 2019-09-14 08:50:10 までの範囲にあるレコードを抽出することになります。本記事では、実際にテーブルを作成し、データを挿入しながら、この条件を実現するクエリを具体的に解説します。サンプルテーブルの作成まず、DATETIME型のカラムを持つテーブルを作成します。mysql> create table DemoTable( &nbs
-
MySQLでvarchar型の日付レコードを現在の日付と比較する方法
MySQLでは、varchar型として保存された日付を現在の日付と比較する場合、STR_TO_DATE()関数を活用するのが効果的です。文字列形式の日付をそのまま比較すると、期待通りの結果が得られないことがあるため、まず適切な日付型に変換してから比較を行いましょう。基本構文varchar型の日付カラムと現在の日付を比較する際の基本的な構文は以下の通りです。select * from yourTableName where str_to_date(yourColumnName,yourFormatSpecifier) > curdate();サンプルテーブルの作成まず、varchar型の日