「invalid input syntax for type timestamp: "" 」case文でTIMESTAMPが空の場合としたかったがエラーになる PostgreSQL

PostgreSQLでタイムスタンプ型のカラムが空白だった場合に2999/12/31でタイムスタンプを入れてしまおうと思ったのですが、invalid input syntax for type timestamp: ""と出てしまい困ったので、解決するまでの備忘録です。

状況

SELECT
title
,start_date
,case
when end_date = '' then to_timestamp('2999/12/31', 'yyyy/MM/dd')
END
from
table
where
now() ::timestamp BETWEEN start_date AND end_date

取得したい行が取得できず、end_dateが空だからなのかなと思い、case文で変わりの値を入れようとしていましたが、invalid input syntax for type timestamp: ""のエラーがでてしまいました。

解決編 nullだった

TIMESTAMPには空の概念がないのか?と思いnullだったらの条件に変えたところうまくいきました。

SELECT
title
,start_date
, COALESCE(end_date, to_timestamp('2999/12/31', 'yyyy/MM/dd')) as end_date
from
table
where
now() ::timestamp BETWEEN start_date AND end_date

これで期間内の行を取得できました。

よく考えれば空白は文字列型だからTIMESTAMP型じゃないなとわかりそうですが、少しハマりました。

PostgreSQL, SQL

Posted by Nakamoto