我正在做一些测试,我创建了下表:
当我执行以下请求时:
SELECT date_trunc('month', my_date) FROM my_table;
它返回:
我确实理解它是PostGreSQL参考所指出的时间戳,但是我不明白为什么要添加这些时区以及为什么+01或+02之间会有小的变化?他们如何选择?是个虫子吗?
答案 0 :(得分:0)
您是date
的受害者,因为隐式转换为timestamp with thome zone
以启用函数调用。
date_trunc仅为timestamp with time zone
和timestamp
输入定义。
+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';