PostGreSQL:date_trunc()在日期上使用时返回带有时区的时间戳

时间:2018-06-23 20:30:13

标签: postgresql date timezone timestamp-with-timezone

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

enter image description here

当我执行以下请求时:

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

它返回:

enter image description here

我确实理解它是PostGreSQL参考所指出的时间戳,但是我不明白为什么要添加这些时区以及为什么+01或+02之间会有小的变化?他们如何选择?是个虫子吗?

1 个答案:

答案 0 :(得分:0)

您是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

或者您可以创建自己的函数,该函数需要一个日期并返回一个日期。

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