PostgreSQLでタイムスタンプ型のカラムが空白だった場合に2999/12/31でタイムスタンプを入れてしまおうと思ったのですが、invalid input syntax for type timestamp: “”と出てしまい困ったので、解決するまでの備忘録です。
Contents
状況
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型じゃないなとわかりそうですが、少しハマりました。