MySQLで日付範囲からレコードを高速に検索する方法|BETWEENキーワードの使い方
MySQLの日付検索に最速・最適なのはBETWEENキーワード
MySQLで特定の日付範囲内のレコードを検索する場合、最も高速かつ簡単な方法はBETWEENキーワードを使用することです。BETWEENは指定した範囲(両端の値を含む)に一致するレコードを効率的に抽出できるため、datetime型カラムへの範囲検索に非常に適しています。
まず、サンプル用のテーブルを作成しましょう。
mysql> create table DemoTable1413
-> (
-> EmployeeName varchar(20),
-> EmployeeJoiningDate datetime
-> );
Query OK, 0 rows affected (0.45 sec)
続いて、insert文でテーブルにいくつかのレコードを挿入します。
mysql> insert into DemoTable1413 values('Chris','2018-09-28 11:10:50');
Query OK, 1 row affected (0.08 sec)
mysql> insert into DemoTable1413 values('David','2019-09-28 11:10:50');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable1413 values('Mike','2019-09-29 12:40:00');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable1413 values('Carol','2019-09-28 12:06:10');
Query OK, 1 row affected (0.08 sec)select文でテーブル内のすべてのレコードを確認してみましょう。
mysql> select * from DemoTable1413;
実行結果は以下の通りです。
+--------------+---------------------+
| EmployeeName | EmployeeJoiningDate |
+--------------+---------------------+
| Chris | 2018-09-28 11:10:50 |
| David | 2019-09-28 11:10:50 |
| Mike | 2019-09-29 12:40:00 |
| Carol | 2019-09-28 12:06:10 |
+--------------+---------------------+
4 rows in set (0.00 sec)
BETWEENを使った日付範囲検索のクエリ例
それでは、指定した日付の間にあるレコードを検索するクエリを見てみましょう。重要なポイントは、終了日時を「23:59:59」まで指定することです。datetime型には時刻情報が含まれているため、「2019-09-28」とだけ指定すると、当日の午前0時ちょうどのデータしかマッチしません。
mysql> select * from DemoTable1413
-> where EmployeeJoiningDate between '2019-09-28' and '2019-09-28 23:59:59'
-> limit 1;
実行結果は以下の通りです。
+--------------+---------------------+
| EmployeeName | EmployeeJoiningDate |
+--------------+---------------------+
| David | 2019-09-28 11:10:50 |
+--------------+---------------------+
1 row in set (0.03 sec)
より堅牢な範囲指定とパフォーマンス向上のコツ
「23:59:59」での指定は直感的ですが、小数秒(マイクロ秒)を持つデータを取りこぼす可能性があります。そのようなケースでは、次のように比較演算子を組み合わせる書き方が安全です。
where EmployeeJoiningDate >= '2019-09-28'
and EmployeeJoiningDate < '2019-09-29'
さらに、EmployeeJoiningDateカラムにインデックスを作成しておけば、BETWEENによる範囲検索はインデックススキャンとして処理されるため、大量のデータがあっても高速に動作します。日付検索のクエリを頻繁に実行するテーブルでは、インデックス設計も合わせて検討するとよいでしょう。
-
MySQLに日付レコードを挿入する最も簡単な方法は?STR_TO_DATE()関数の使い方を解説
MySQLで日付レコードを挿入・変換するには?MySQLでは、STR_TO_DATE() 関数を使うことで、文字列として保存された日付データを日付形式に変換できます。以下が基本の構文です。SELECT STR_TO_DATE(yourColumnName, %b %Y) FROM yourTableName;この記事では、実際にテーブルを作成し、「Jan 2018」のような「月 年」形式の文字列データを日付に変換する手順を、具体例とともにわかりやすく解説します。ステップ1:テーブルを作成するまず、サンプル用のテーブルを作成しましょう。ここでは入社年月を格納するカラムを持つテーブルを定義します。
-
MySQLで日付データから月の初日と末日を取得する方法
MySQLでは、日付型のカラムから「その月の最初の日」と「最後の日」を簡単に求めることができます。この記事では、実際にテーブルを作成し、サンプルデータを使いながら具体的な手順を解説します。1. テーブルの作成まず、日付を格納するためのテーブルを作成します。mysql> create table DemoTable -> ( -> DueDate date -> ); Query OK, 0 rows affected (0.73 sec)2. レコードの挿入次に、INSERT文を使ってテーブルにいくつかのレコードを挿入します。mysql>