SQLで基準点からの日時計算

DBに、「開始点」と「終了点」のdatetimeを放り込むとして、一方が入力値、もう一方は計算により導き出されるケースがあります。

当然、プログラムで計算してクエリに渡してあげることはできますが、SQLの日付時刻関数で計算してあげたほうが、キレイなパターンもある。



INTERVAL キーワードおよび unit 指定子は、大文字小文字の区別をしません。

次の表は、各 unit 値に対して予想される expr 引数のフォームを示したものです。

unit 予想される expr フォーマット
MICROSECONDMICROSECONDS
SECONDSECONDS
MINUTEMINUTES
HOURHOURS
DAYDAYS
WEEKWEEKS
MONTHMONTHS
QUARTERQUARTERS
YEARYEARS
SECOND_MICROSECOND'SECONDS.MICROSECONDS'
MINUTE_MICROSECOND'MINUTES.MICROSECONDS'
MINUTE_SECOND'MINUTES:SECONDS'
HOUR_MICROSECOND'HOURS.MICROSECONDS'
HOUR_SECOND'HOURS:MINUTES:SECONDS'
HOUR_MINUTE'HOURS:MINUTES'
DAY_MICROSECOND'DAYS.MICROSECONDS'
DAY_SECOND'DAYS HOURS:MINUTES:SECONDS'
DAY_MINUTE'DAYS HOURS:MINUTES'
DAY_HOUR'DAYS HOURS'
YEAR_MONTH'YEARS-MONTHS'

MySQL は、expr フォーマットにおいてはいかなる句読区切り記号の使用も許容します。

http://dev.mysql.com/doc/refman/5.1/ja/date-and-time-functions.html
MySQL公式より

+(-) INTERVAL expr unit

要は、

 + INTERVAL 数値 時間単位

ってことですね。

こっちを使うほうがすっきりすることもあるので、覚えておいて臨機応変に。