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

MySQLで日付を指定してレコードを検索する方法を徹底解説

MySQLでは、テーブルに保存された日付(DATE型・DATETIME型)を条件にすることで、特定の日に行われたレコードを簡単に抽出できます。本記事では、具体的なサンプルテーブルを使いながら、日付によるレコード検索の基本と、日時が含まれる場合の検索方法をわかりやすく解説します。

サンプルテーブルの準備

ここでは、「ProductName(商品名)」「Quantity(数量)」「OrderDate(注文日)」という3つのカラムを持つ「Order123」というテーブルを例に説明します。テーブルの中身は以下のとおりです。

mysql> Select * from Order123;
+-------------+----------+------------+
| ProductName | Quantity | OrderDate  |
+-------------+----------+------------+
| A           | 100      | 2017-05-25 |
| B           | 105      | 2017-05-25 |
| C           | 55       | 2017-05-25 |
| D           | 250      | 2017-05-26 |
| E           | 500      | 2017-05-26 |
| F           | 500      | 2017-05-26 |
| G           | 500      | 2017-05-27 |
| H           | 1000     | 2017-05-27 |
+-------------+----------+------------+
8 rows in set (0.00 sec)

特定の日付でレコードを検索する基本の書き方

たとえば「2017年5月25日に受けた注文が何件あるか知りたい」という場合は、WHERE句でOrderDateを指定するだけでOKです。以下のクエリを実行してみましょう。

mysql> Select ProductName, Quantity from Order123 where OrderDate = '2017-05-25';
+-------------+----------+
| ProductName | Quantity |
+-------------+----------+
| A           | 100      |
| B           | 105      |
| C           | 55       |
+-------------+----------+
3 rows in set (0.00 sec)

実行結果のとおり、2017年5月25日の注文データ3件(商品A・B・C)だけが抽出されました。このように、日付がDATE型で保存されている場合は「カラム名 = 'YYYY-MM-DD'」というシンプルな条件で検索できます。

日時(DATETIME型)が含まれる場合の検索方法

一方、OrderDateカラムに「2017-05-25 10:30:00」のように時刻まで保存されているケースでは、上記の方法では一致するレコードが見つからないことがあります。なぜなら、時刻を含む値は「2017-05-25」だけの条件とは完全一致しないためです。

そんなときに便利なのが、DATE()関数です。DATE()関数を使えば、DATETIME型の値から日付部分だけを取り出して比較できます。

mysql> Select ProductName, Quantity from Order123 where date(OrderDate) = '2017-05-25';

このクエリでは、時刻が何であれ「2017年5月25日」に該当するすべてのレコードを取得できます。

補足:範囲指定での検索も有効

なお、大量データを扱う場合は、DATE()関数をカラムに適用するとインデックスが効きにくくなる点に注意しましょう。その場合は、以下のように範囲指定(BETWEENや以上・未満の条件)で検索する方法がおすすめです。

mysql> Select ProductName, Quantity from Order123
    -> where OrderDate >= '2017-05-25' and OrderDate < '2017-05-26';

この書き方であれば、インデックスを活かしながら高速に特定日付のレコードを検索できます。用途に応じて、=による一致検索とDATE()関数・範囲指定を使い分けるとよいでしょう。


  1. MySQLでテーブル内の^(キャレット)文字を検索する方法

    MySQLで^文字を検索するには?MySQLのテーブルやカラム名に含まれる^(キャレット)文字を検索したい場合は、LIKE演算子を使用します。特に、information_schemaデータベースのcolumnsテーブルを参照することで、データベース全体から^を含むカラム名を効率的に特定できます。基本の検索構文以下の構文を使用して、^文字を含むカラムを検索できます。select table_schema, table_name, column_namefrom information_schema.columnswhere column_name like %^%;このクエリは、スキーマ名(t

  2. MySQLでテーブルの日付レコードを変更する方法|UPDATEとDATE_ADD()の使い方

    MySQLで保存済みの日付データに年数を加算して変更したい場合、UPDATEコマンドとDATE_ADD()関数を組み合わせることで簡単に実現できます。ここでは、実際のSQLクエリ例を使いながら、日付レコードを変更する手順を順番に解説します。1. テーブルを作成するまず、日付型(date)のカラムを持つテーブルを作成します。mysql> create table DemoTable1984 ( ShippingDate date ); Query OK, 0 rows affected (0.00 sec)2. レコードを挿入する次に、INSERTコマンドを使ってテ