テストデータ
http://mono-space.net/jpug_study.txt
以下はエラー select south.t, min(east.t) , min(east.t) - south.t from east,south where (east.t > (south.t + time '00:10')) group by south.t ; ERROR: operator is not unique: time without time zone + time without time zone HINT: Could not choose a best candidate operator. You may need to add explicit type casts.
これは通る select south.t, min(east.t) , min(east.t) - south.t from east,south where (east.t > (south.t + '00:10'::interval)) group by south.t ; これも通る select south.t, min(east.t) , min(east.t) - south.t from east,south where (east.t > (south.t + '3 minutes'::interval)) group by south.t ;
日付と日付の差分はinterval型であり、integer型ではない。
そのため、日付と加算、減産できるのはinterval型('00:10'::interval等で表現)
となる
日付とintegerの変換を行いたい場合には、epochを使用する。
http://osb.sra.co.jp/PostgreSQL/Manual/PostgreSQL-8.1-ja/functions-datetime.html
epoch
date型とtimestamp型の値において、1970-01-01 00:00:00からの秒数(負の数の場合もあり)。interval型の値ではその時間間隔における秒の合計。
SELECT EXTRACT(EPOCH FROM TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40-08');
Result: 982384720SELECT EXTRACT(EPOCH FROM INTERVAL '5 days 3 hours');
Result: 442800以下に、この経過秒数をタイムスタンプ値に変換する方法を示します。
SELECT TIMESTAMP WITH TIME ZONE 'epoch' + 982384720 * INTERVAL '1 second';