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')で指定するのが確実です。特に大量のデータを扱う場合は、インデックスを有効活用できる範囲条件の方がパフォーマンス面で有利になります。
-
MySQLに日付レコードを挿入する最も簡単な方法は?STR_TO_DATE()関数の使い方を解説
MySQLで日付レコードを挿入・変換するには?MySQLでは、STR_TO_DATE() 関数を使うことで、文字列として保存された日付データを日付形式に変換できます。以下が基本の構文です。SELECT STR_TO_DATE(yourColumnName, %b %Y) FROM yourTableName;この記事では、実際にテーブルを作成し、「Jan 2018」のような「月 年」形式の文字列データを日付に変換する手順を、具体例とともにわかりやすく解説します。ステップ1:テーブルを作成するまず、サンプル用のテーブルを作成しましょう。ここでは入社年月を格納するカラムを持つテーブルを定義します。
-
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コマンドを使ってテ