【问题标题】: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 zonetimestamp 输入定义。

    +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';
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-28
      • 2015-09-30
      • 1970-01-01
      • 2018-10-25
      • 2012-09-17
      • 2017-10-06
      • 1970-01-01
      • 2019-08-22
      相关资源
      最近更新 更多