時刻だけを指定して検索する - MySQL

MySQL の SELECT で更新日時を対象にする場合、時刻だけを指定して検索する方法ってどうやるんだっけ?
って思ったんだけど、日付だけを対象にすることは良くあるけど、時刻だけを対象にすることってやったこと無かったので、少し悩んだ。

ネットで軽く調べてみたんだけど、出て来なかったので一応備忘録的な感じで書いておこうと思います。

って言っても、全然複雑な話じゃないのですが・・・

例えば、以下の様なデータを持ってる tbl というテーブルから、日付に関係なく5時から7時のあいだに更新されたデータを抽出したいとします。

+----+---------------------+
| id | updated             |
+----+---------------------+
|  1 | 2013-01-10 03:01:01 |
|  2 | 2013-01-25 05:01:01 |
|  3 | 2013-02-12 09:01:01 |
|  4 | 2013-03-01 06:01:01 |
|  5 | 2013-03-12 09:01:01 |
+----+---------------------+

その場合の SQL は以下の様な感じ。

SELECT * FROM tbl
WHERE TIME(updated) BETWEEN '05:00:00' AND '07:00:00'

TIME関数で updated から時刻部分だけを抽出し、その時刻に対して BETWEEN で絞り込んでいます。

上記の例で行けば、結果は下記のように為るはずです。

+----+---------------------+
| id | updated             |
+----+---------------------+
|  2 | 2013-01-25 05:01:01 |
|  4 | 2013-03-01 06:01:01 |
+----+---------------------+

まぁ、余り使う機会はないかもしれませんね。

今回は、同じテーブルを更新している複数のバッチが、時間を開けて実行されている環境で、特定のバッチだけ動いていない事が分かったのですが、ログが全く残っていないのでいつから動いていないのかを調べるために使いました。

気がついてしまえば簡単なんですけどね。

思いつくまでに若干時間が掛かったので、一応残しておきます。