我正在使用Postgres 9.1 . 以下查询无法按预期方式工作 . 合并应返回 first non-null value . 但是,此查询返回null(1?)而不是date(2) .
select COALESCE(
TO_DATE('','yyyymmdd'), --(1)
TO_DATE('20130201','yyyymmdd') --(2)
);
--(1) this evaluates independently to null
--(2) this evaluates independently to the date,
-- and therefore is the first non-null value
我究竟做错了什么?任何解决方法?
编辑:这可能与Coalesce毫无关系 . 我尝试了Case When构造的一些实验;事实证明,Postgres有这个大丑陋的bug,它将 TO_DATE('','yyyymmdd')
视为 not null ,即使选择它返回null .
[PS:打击以上以避免误导 . Postgres没有bug,而是将空字符串视为null . 见答案 . ]
1 回答
因为您将空字符串而不是
NULL
作为参数传递给TO_DATE()
,所以不会计算为NULL
这将成功评估为NULL
如果你期望一个空字符串并希望将其视为
NULL
,你可以使用NULLIF()
这就是说你的示例代码将(1)计算为NULL
并返回
这是 SQLFiddle 演示