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

MySQLで日付に基づいてレコードを検索する方法

MySQLでは、DATETIME型のカラムから特定の日付に基づいてレコードを検索する際に、DATE()関数を使用すると便利です。DATETIME型は「日付 + 時刻」の形式で値を保持しているため、日付だけを比較したい場合はDATE()関数で日付部分のみを取り出すのがポイントです。

ここでは、乗客情報を管理するテーブルを例に、特定の日付のレコード件数を取得する方法を解説します。

1. テーブルの作成

まず、以下のコマンドでテーブルを作成します。

mysql> create table DemoTable732 (
   Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
   PassengerId int,
   PassengerName varchar(100),
   PassengerAge int,
   PassengerTravelDatetime datetime
);
Query OK, 0 rows affected (0.67 sec)

2. レコードの挿入

次に、INSERT文を使ってサンプルデータを挿入します。

mysql> insert into DemoTable732(PassengerId,PassengerName,PassengerAge,PassengerTravelDatetime) values(110,'Chris',25,'2019-07-23 12:45:56');
Query OK, 1 row affected (0.40 sec)
mysql> insert into DemoTable732(PassengerId,PassengerName,PassengerAge,PassengerTravelDatetime) values(120,'Robert',24,'2019-07-21 11:05:00');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable732(PassengerId,PassengerName,PassengerAge,PassengerTravelDatetime) values(120,'Sam',26,'2019-07-21 11:05:00');
Query OK, 1 row affected (0.30 sec)

3. テーブル内の全レコードを表示

SELECT文でテーブルの内容を確認してみましょう。

mysql> select *from DemoTable732;

実行すると、以下のような結果が表示されます。

+----+-------------+---------------+--------------+-------------------------+
| Id | PassengerId | PassengerName | PassengerAge | PassengerTravelDatetime |
+----+-------------+---------------+--------------+-------------------------+
| 1  | 110         | Chris         | 25           | 2019-07-23 12:45:56     |
| 2  | 120         | Robert        | 24           | 2019-07-21 11:05:00     |
| 3  | 120         | Sam           | 26           | 2019-07-21 11:05:00     |
+----+-------------+---------------+--------------+-------------------------+
3 rows in set (0.00 sec)

4. 日付に基づいてレコード数を検索するクエリ

ここが本題です。例えば「乗客IDが120で、移動日が2019年7月21日のレコード件数」を取得したい場合、以下のようにCOUNT()DATE()関数を組み合わせます。

mysql> select count(Id) from DemoTable732 where PassengerId=120 and
date(PassengerTravelDatetime)='2019-07-21';

実行結果は以下の通りです。

+-----------+
| count(Id) |
+-----------+
| 2         |
+-----------+
1 row in set (0.00 sec)

解説と注意点

このクエリでは、WHERE句の中でdate(PassengerTravelDatetime)='2019-07-21'と指定することにより、時刻部分を無視して日付だけで比較しています。そのため、時刻が異なる複数のレコード(11:05:00など)も正しくカウントされ、結果は「2」となりました。

なお、DATETIME型のカラムに直接 ='2019-07-21' のように日付だけを指定すると、時刻が00:00:00のレコードしか一致しないため注意が必要です。日付単位で検索したい場合は、今回のようにDATE()関数を使うか、範囲条件(>= '2019-07-21 00:00:00' AND < '2019-07-22 00:00:00')で指定するのが確実です。特に大量のデータを扱う場合は、インデックスを有効活用できる範囲条件の方がパフォーマンス面で有利になります。

  1. MySQLに日付レコードを挿入する最も簡単な方法は?STR_TO_DATE()関数の使い方を解説

    MySQLで日付レコードを挿入・変換するには?MySQLでは、STR_TO_DATE() 関数を使うことで、文字列として保存された日付データを日付形式に変換できます。以下が基本の構文です。SELECT STR_TO_DATE(yourColumnName, %b %Y) FROM yourTableName;この記事では、実際にテーブルを作成し、「Jan 2018」のような「月 年」形式の文字列データを日付に変換する手順を、具体例とともにわかりやすく解説します。ステップ1:テーブルを作成するまず、サンプル用のテーブルを作成しましょう。ここでは入社年月を格納するカラムを持つテーブルを定義します。

  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コマンドを使ってテ