pgsql中“带区域的时间戳”的默认值是多少?

时间:2014-01-27 06:50:11

标签: postgresql

如果column具有null值,我使用以下代码来获取默认值。 PostgreSQL版本:9.3

COALESCE(LastLoginTimestamp,'')

错误:

invalid input syntax for type timestamp with time zone: ""

如果LastLoginTimestamp为null,我需要做的是为了获得默认值/空值。

2 个答案:

答案 0 :(得分:3)

''作为时间戳没有有效的解释; CAST('' AS TIMESTAMP)也会失败。有充分理由''是时间戳的无意义输入,除错误外不应产生任何内容。

这个空字符串被转换为默认值的想法来自MySQL和MyISAM,当时没有事务支持,所以MySQL无法承受失败,因为它无法回滚;最好为无效输入组成虚拟数据。毋庸置疑,这不适用于PostgreSQL(或具有适当设置的现代MySQL)。

在您的情况下,如果没有上次登录,则LastLoginTimestamp应该确实为NULL。这是它的合理价值。如果由于某种原因你不能或不会这样做,我建议使用特殊的时间戳值-infinity

COALESCE(LastLoginTimestamp, TIMESTAMP '-infinity')

答案 1 :(得分:0)

如果timestamp with time zonecoalesce)的第一个参数为LastLoginTimestamp,以下内容将以null的形式返回1900-01-01:

coalesce(LastLoginTimestamp,cast('1900-01-01' as timestamp with time zone))

您的尝试失败了,因为PostgreSQL不知道您的timestamp类型是''。默认情况下,PostgreSQL将假定''为text:

select coalesce(null,'')