はまった1

時刻を比較する場合、時刻型(time or datetime)を普通に加減算してたんやけど、これは全然認められていないことがわかった。例えば、開始時刻(StartDateTime)をカラムとして持つテーブルで、10秒前までのレコードを全部抜き出したかったら、

select * from some_table where now()-StartDateTime < 10

なんてやっちゃうとひどいめに遭います。。。しかもこれ、現在時刻が10秒〜59秒までなら正常に動くのでタチが悪いんです。

select now()-59

↑これでどんないけないことが起こるか簡単に確かめらます。

んで、正確にはどうするかというと、まぁ色々あるんですが、私は

select * from some_table where UNIX_TIMESTAMP()-UNIX_TIMESTAMP(StartDateTime) < 10

としてます。