【问题标题】:PostGreSQL : date_trunc() returns timestamp with timezone when used on datePostGreSQL:date_trunc() 在日期使用时返回带有时区的时间戳
【发布时间】:2018-12-02 22:13:36
【问题描述】:
我正在做一些测试,我创建了下表:
当我执行以下请求时:
SELECT date_trunc('month', my_date) FROM my_table;
它返回:
我确实理解它是 PostGreSQL 参考中所述的时间戳,但我不明白为什么它会添加这些时区以及为什么 +01 或 +02 之间的差异很小?他们是如何选择的?这是一个错误吗?
【问题讨论】:
标签:
postgresql
date
timezone
timestamp-with-timezone
【解决方案1】:
你成为date 的牺牲品,被隐式转换为timestamp with thome zone 以启用函数调用。
date_trunc 仅针对 timestamp with time zone 和 timestamp 输入定义。
+01 +02 等取决于您所在时间区域的夏令时规则。
如果您想要时间戳而不是 timestamptz,请先将日期转换为时间戳。
SELECT date_trunc('month', cast(my_date as timestamp)) FROM my_table
或者您可以创建自己的函数,该函数接受一个日期并返回一个日期。
create or replace function date_trunc(text,date) returns date language sql as
'select date_trunc($1, $2::timestamp)::date';