问题描述
我对Postgresql的COALESCE函数有奇怪的行为。根据此函数的参数,结果是不同的:
SELECT
"CreatedOn",-- 7/24/2020 8:15:03 AM
COALESCE("O"."CreatedOn",Now()) "coalesce_with_Now",-- 7/24/2020 11:15:03 AM
COALESCE("O"."CreatedOn",TO_TIMESTAMP('2020-10-12 10:05:05.260','YYYY-MM-DD HH24:MI:SS.FF3')) "coalesce_with_const",Now() at time zone 'utc') "coalesce_with_Now_at_utc",-- 7/24/2020 8:15:03 AM
COALESCE("O"."CreatedOn") "only_coalesce",-- 7/24/2020 8:15:03 AM
CASE WHEN "O"."CreatedOn" IS NULL THEN Now() ELSE "O"."CreatedOn" END "case_analogue",-- 7/24/2020 11:15:03 AM
CASE WHEN "O"."CreatedOn" IS NOT NULL THEN "O"."CreatedOn" ELSE Now() END "case_analogue2" -- 7/24/2020 11:15:03 AM
FROM "Opportunity" "O";
原始值存储在utc中。服务器的时区为+3。
因此,如果参数中存在其他任何值,它将更改时区。 我阅读了COALESCE method的文档,但没有发现有关此功能这种行为的信息。
Postgresql服务器的版本: x86_64-pc-linux-gnu上的Postgresql 11.9(Debian 11.9-0 + deb10u1),由gcc(Debian 8.3.0-6)8.3.0,64位编译
在其他实例(使用较新版本)上,我无法重现这种情况。仅仅是错误还是此功能取决于某些服务器配置参数?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)