MySQLでDATE文字列とDATETIME型カラムを比較する方法
MySQLでは、DATE()関数を使うことで、DATETIME型カラムから取り出した日付文字列と、任意の日付文字列(DATE形式)を比較できます。DATETIME型は「日付+時刻」の情報を持つため、そのまま文字列と比較すると時刻部分が一致せずヒットしません。そこでDATE()関数で日付部分だけを抽出して比較するのがポイントです。
基本構文
SELECT * FROM テーブル名 WHERE DATE(カラム名) = '任意の日付文字列';
検証用テーブルの作成
それでは、実際にテーブルを作成して動作を確認してみましょう。まずはDATETIME型のカラムを持つテーブルを作成します。
mysql> CREATE TABLE DateTimeDemo
-> (
-> ArrivalTime datetime
-> );
Query OK, 0 rows affected (0.61 sec)テストデータの挿入
次に、INSERTコマンドを使ってレコードを挿入します。NOW()関数やDATE_ADD()関数を組み合わせることで、現在日時を基準としたさまざまな日時データを簡単に登録できます。
mysql> INSERT INTO DateTimeDemo VALUES(NOW()); Query OK, 1 row affected (0.11 sec) mysql> INSERT INTO DateTimeDemo VALUES(DATE_ADD(NOW(), INTERVAL 2 YEAR)); Query OK, 1 row affected (0.47 sec) mysql> INSERT INTO DateTimeDemo VALUES(DATE_ADD(NOW(), INTERVAL 1 YEAR)); Query OK, 1 row affected (0.19 sec) mysql> INSERT INTO DateTimeDemo VALUES(DATE_ADD(NOW(), INTERVAL 4 YEAR)); Query OK, 1 row affected (0.13 sec) mysql> INSERT INTO DateTimeDemo VALUES(DATE_ADD(NOW(), INTERVAL -2 YEAR)); Query OK, 1 row affected (0.17 sec) mysql> INSERT INTO DateTimeDemo VALUES(DATE_ADD(NOW(), INTERVAL -1 YEAR)); Query OK, 1 row affected (0.17 sec)
登録データの確認
SELECT文ですべてのレコードを表示してみます。
mysql> SELECT * FROM DateTimeDemo;
実行結果は以下の通りです。
+---------------------+ | ArrivalTime | +---------------------+ | 2018-12-06 10:12:45 | | 2020-12-06 10:13:10 | | 2019-12-06 10:13:21 | | 2022-12-06 10:13:27 | | 2016-12-06 10:13:42 | | 2017-12-06 10:13:50 | +---------------------+ 6 rows in set (0.00 sec)
DATETIMEカラムと日付文字列の比較
それでは、冒頭で紹介した構文を実装して、DATETIME型カラムと日付文字列を比較してみましょう。「2022年12月6日のレコード」を抽出するクエリは次のようになります。
mysql> SELECT * FROM DateTimeDemo WHERE DATE(ArrivalTime) = '2022-12-06';
実行結果:
+---------------------+ | ArrivalTime | +---------------------+ | 2022-12-06 10:13:27 | +---------------------+ 1 row in set (0.14 sec)
このように、時刻が異なるレコードでもDATE()関数で日付部分だけを取り出して比較すれば、目的の日付に該当するレコードを正しく取得できます。
補足:パフォーマンスに関する注意点
WHERE DATE(カラム名) = '...'のようにカラムに関数を適用すると、インデックスが利用されず全件スキャンになる場合があります。大量データを扱う場合は、範囲指定による比較(例:WHERE ArrivalTime >= '2022-12-06 00:00:00' AND ArrivalTime < '2022-12-07 00:00:00')の方が高速に動作するので、用途に応じて使い分けるとよいでしょう。
-
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で文字列から日付を抽出する方法|SUBSTRING_INDEX関数の実践的な使い方
MySQLで文字列から日付を抽出するには?MySQLで文字列の中から日付部分だけを取り出したい場合、SUBSTRING_INDEX() 関数を使うのが便利です。この関数は、指定した区切り文字を基準に文字列を分割し、必要な部分を取得できます。ここでは、実際にテーブルを作成し、文章の中に含まれる日付(例:12/31/2018)を抽出する手順を解説します。1. サンプルテーブルを作成するまず、文字列を格納するためのテーブルを作成します。mysql> create table DemoTable -> ( -> Title text -> );Query OK