SQL文:BETWEENと%型:日付だけで絞り込みし、時・分・秒は絞り込み対象にしない

目次

[ズバリ結論!] BETWEEN~TOの使い方

カラムの登録日がDATE型というのはよくあること。そして、ある一日だけの売上や来訪者数等を絞り込んで、抽出して表示させたい、ということは非常に多い。

しかしこのとき、DATE型は時・分・秒まで記録されており、DATE型のままで絞り込みをしても、秒まで同じレコードは普通は存在しない。短時間で大量アクセスがあるような場合を除いて。

このとき、変数型でBETWEEN TOのSQL文を使えばPHP側で時・分・秒部分をカットしてから絞り込ませるようにできる。

SELECT カラム名(, カラム名, ...)
FROM テーブル名
WHERE カラム名 BETWEEN 日付 AND 日付;
SELECT *
 FROM tablename WHERE reg_date BETWEEN '2018-05-01 00:00:00' AND '2018-05-31 23:59:59';
$stmt = $pdo->prepare('SELECT *
 FROM tablename WHERE reg_date BETWEEN ? AND ? ORDER BY reg_date');
$date_join_bet = $bind_date . '%';

$date_join_to = $bind_date . '%';
$stmt->bindParam(1, $date_join_bet , PDO::PARAM_STR);
$stmt->bindParam(2, $date_join_to , PDO::PARAM_STR);

こうすれば、たとえ「ある一日だけ」を抽出したい場合を達成できる。

使用例

「ある一日だけ」を絞り込んでウェブページに表示したいとき、日付を登録しているカラムがDATE型だと、時・分・秒までがデータにあるため、単に「reg_date = ?」とするだけだと本当は指定した一日には複数件のレコードがあっても、一件だけしか取得できない。

しかしこれを使えば時間部分に%を加えることで事実上カットして抽出できるから、指定した一日のレコードのすべてを取得できる。

目次
閉じる