gpt4 book ai didi

sql - Coalesce 和 Case-When with To_Date 没有按预期工作(Postgres 错误?)

转载 作者:行者123 更新时间:2023-11-29 14:11:48 24 4
gpt4 key购买 nike

我使用的是 Postgres 9.1。 以下查询未按预期工作。 Coalesce 应该返回第一个非空值。但是,此查询返回 null (1?) 而不是日期 (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 有这个 丑陋的大错误 ,它将 TO_DATE('','yyyymmdd') 视为 not null,即使选择它也会返回 null。

[附注:在上面划掉以避免误导。 Postgres 没有错误,但不会将空字符串视为 null。查看答案。]

最佳答案

SELECT TO_DATE('','yyyymmdd');

不会评估为 NULL,因为您将空字符串而不是 NULL 作为参数传递给 TO_DATE()

这将成功评估为 NULL

SELECT TO_DATE(NULL,'yyyymmdd');

如果您需要一个空字符串并希望将其视为NULL,您可以使用NULLIF()

SELECT TO_DATE(NULLIF(dt, ''),'yyyymmdd')
FROM
(
SELECT CAST('' AS VARCHAR(32)) dt
) q

话虽如此,您的示例代码将 (1) 计算为 NULL

SELECT COALESCE(
TO_DATE(NULLIF('', ''),'yyyymmdd'), --(1)
TO_DATE(NULLIF('20130201',''),'yyyymmdd') --(2)
);

返回

|                        COALESCE |-----------------------------------| February, 01 2013 00:00:00+0000 |

这是 SQLFiddle 演示

关于sql - Coalesce 和 Case-When with To_Date 没有按预期工作(Postgres 错误?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17397183/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com