PHP | MySQLのBETWEEN演算子で日時データを範囲指定する方法

PHP,PHP MySQL

MySQLのBETWEEN演算子を利用してカラムのデータ型がDATETIMEやTIMESTAMP、DATEなどの日付データで期間を範囲指定する方法とPHPのサンプルコードを紹介しています。

MySQLの日時データで期間を範囲指定する

日付データを範囲指定する方法はいくつもありますが、このページではBETWEEN演算子を使った方法を紹介しています。

// クエリ
$sql = "SELECT * FROM `table_name` WHERE `column_name` BETWEEN 'ここから' AND 'ここまで'";

// クエリを実行
$res = $mysqli->query($sql);

まず、データ型がDATETIMEやTIMESTAMP、DATEの場合、追加や検索する際の日付データは、例えば「2022-09-08」と時間軸を省略すると「2022-09-08 00:00:00」として代入されます。

「2022」とした場合は月日以降の部分には「2022-01-01 00:00:00」が代入されます。

その事を前提に日付データの範囲指定をしていきます。

特定の日付のデータを指定

SQLで特定の日付のデータを指定したい場合、BETWEEN演算子で指定した日付、サンプルでは「2022-09-08」として指定、その翌日の日付「2022-09-09」をAND演算子の後に指定します。

// クエリ
$sql = "SELECT * FROM `table_name` WHERE `column_name` BETWEEN '2022-09-08' AND '2022-09-09'";

// クエリを実行
$res = $mysqli->query($sql);

指定日付午前0時「2022-09-8 00:00:00」から翌日午前0時の「2022-09-09 00:00:00までの範囲指定しますのでSQLは2022年9月8日のデータのみを取得します。

「2022-09-09 00:00:00を日付を取得してしまいますが、そんなデータは基本的に皆無だと考えられます。
よって「2022-09-8 00:00:00」「2022-09-08 23:59:59などを指定する必要はありません。

特定の月のデータを指定

特定の月を指定する場合も同様に「2022-09」「2022-10」を指定する事で2022年9月のデータを取得する事が可能です。

処理上では「2022-09-01 00:00:00」から翌月1日午前0時の「2023-10-01 00:00:00までのデータを指定しています。

// クエリ
$sql = "SELECT * FROM `table_name` WHERE `column_name` BETWEEN '2022-09' AND '2022-10'";

// クエリを実行
$res = $mysqli->query($sql);

特定の年のデータを指定

特定の年のデータを指定する場合も同じになります。

BETWEEN演算子で「2022」「2023」を指定する事で「2022-01-01 00:00:00」から翌年1月1日午前0時の「2023-01-01 00:00:00までの期間を指定した場合と同じ処理となります。

// クエリ
$sql = "SELECT * FROM `table_name` WHERE `column_name` BETWEEN '2022' AND '2023'";

// クエリを実行
$res = $mysqli->query($sql);

PHP,PHP MySQL

Posted by Yousuke.U