PostgreSQLでは単純に引き算すれば日付間の差を取得できる。
SELECT '2011-12-31 23:59:59' - TIMESTAMP '2011-01-01 00:00:00' -- => "364 days 23:59:59"結果はInterval型になる。
もちろん普通の日付型や日時型の列でもOK。
SELECT updated_at - created_at
条件として使う
条件として判定したい場合は下記のように文字列と比較できる。
SELECT '2011-12-31 23:59:59' - TIMESTAMP '2011-01-01 00:00:00' > '300 days' -- => TRUE左辺を考慮して'300 days'のような文字列はInterval型にCASTして比較してくれる。
SELECT '2011-01-31 23:59:59' - TIMESTAMP '2011-01-01 00:00:00' > '300 days' -- => FALSE
SELECT '2012-12-31 23:59:59' - TIMESTAMP '2011-01-01 00:00:00' > '1 year' -- => TRUE
もちろWHERE句でも使える。
注意点
DATE型とDATE型の引き算の場合は結果がInterval型ではなく、日数を表すInteger型になる。
SELECT '2011-12-31' - DATE '2011-01-01' -- => 364これを条件として判定したい場合は、'300 days'のような文字列(あるいはInterval型)ではなく、素直に数値で判定するか、あるいはTIMESTAMP型にCASTにする。
-- 数値で判定
SELECT '2011-12-31' - DATE '2011-01-01' > 300
-- TIMESTAMP型にCAST
SELECT '2011-12-31' - TIMESTAMP '2011-01-01' > '300 days'
参考:日付/時刻関数と演算子 (PostgreSQLマニュアル)
2 件のコメント:
Congratulations. You have a nice PHP blog. I do not understand japanese, but I can understand your code.
わかりにくい
コメントを投稿