PostGreSQL : date_trunc() returns 用于日期时带时区的时间戳

PostGreSQL : date_trunc() returns timestamp with timezone when used on date

我正在做一些测试,我创建了以下 table:

当我执行以下请求时:

SELECT date_trunc('month', my_date) FROM  my_table; 

它 returns :

我知道它是 PostGreSQL 参考资料中所述的时间戳,但我不明白为什么要添加这些时区以及为什么 +01 或 +02 之间会有这么小的差异?他们是如何选择的?这是一个错误吗?

您正在成为 date 的受害者,隐式转换为 timestamp with thome zone 以启用函数调用。

date_trunc 仅为 timestamp with time zonetimestamp 输入定义。

+01 +02 等取决于您所在时间区域的夏令时规则。

如果你想要时间戳而不是时间戳,首先将日期转换为时间戳。

 SELECT date_trunc('month', cast(my_date as timestamp)) FROM my_table

或者您可以创建自己的函数,它接受一个日期 returns 一个日期。

 create or replace function date_trunc(text,date) returns date language sql as
  'select date_trunc(, ::timestamp)::date';