PostgreSQL COALESCE参数更改DateTime的结果时区

问题描述

我对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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...