SQLで基準点からの日時計算
DBに、「開始点」と「終了点」のdatetimeを放り込むとして、一方が入力値、もう一方は計算により導き出されるケースがあります。
当然、プログラムで計算してクエリに渡してあげることはできますが、SQLの日付時刻関数で計算してあげたほうが、キレイなパターンもある。
INTERVAL
キーワードおよび unit
指定子は、大文字小文字の区別をしません。
次の表は、各 unit
値に対して予想される expr
引数のフォームを示したものです。
unit 値 | 予想される expr フォーマット |
MICROSECOND | MICROSECONDS |
SECOND | SECONDS |
MINUTE | MINUTES |
HOUR | HOURS |
DAY | DAYS |
WEEK | WEEKS |
MONTH | MONTHS |
QUARTER | QUARTERS |
YEAR | YEARS |
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 数値 時間単位
ってことですね。
こっちを使うほうがすっきりすることもあるので、覚えておいて臨機応変に。