如果column具有null值,我使用以下代码来获取默认值。 PostgreSQL版本:9.3
COALESCE(LastLoginTimestamp,'')
错误:
invalid input syntax for type timestamp with time zone: ""
如果LastLoginTimestamp为null,我需要做的是为了获得默认值/空值。
答案 0 :(得分:3)
''
作为时间戳没有有效的解释; CAST('' AS TIMESTAMP)
也会失败。有充分理由''
是时间戳的无意义输入,除错误外不应产生任何内容。
这个空字符串被转换为默认值的想法来自MySQL和MyISAM,当时没有事务支持,所以MySQL无法承受失败,因为它无法回滚;最好为无效输入组成虚拟数据。毋庸置疑,这不适用于PostgreSQL(或具有适当设置的现代MySQL)。
在您的情况下,如果没有上次登录,则LastLoginTimestamp
应该确实为NULL
。这是它的合理价值。如果由于某种原因你不能或不会这样做,我建议使用特殊的时间戳值-infinity
。
COALESCE(LastLoginTimestamp, TIMESTAMP '-infinity')
答案 1 :(得分:0)
如果timestamp with time zone
(coalesce
)的第一个参数为LastLoginTimestamp
,以下内容将以null
的形式返回1900-01-01:
coalesce(LastLoginTimestamp,cast('1900-01-01' as timestamp with time zone))
您的尝试失败了,因为PostgreSQL不知道您的timestamp
类型是''
。默认情况下,PostgreSQL将假定''
为text:
select coalesce(null,'')