【问题标题】:How to remove TimeZone in query to_timestamp Postgresql如何在查询 to_timestamp Postgresql 中删除 TimeZone
【发布时间】:2016-02-26 02:17:45
【问题描述】:

我在 Postgresql 中查找,我想在我的查询中删除 +9 UTC 值。

例如:在to_timestamp列中,我想去掉+09,只保留2016-02-26 00:23:44的值。

这是我的查询:

select t,to_timestamp(v) from c1.hour where f = 22 and date_trunc('day',t - '1 hour'::INTERVAL) = '2016-02-26 00:00:00' order by t ;

这是我的结果:

这是我没有使用 to_timestamp 时的结果:

我能得到一些帮助吗?

【问题讨论】:

  • 首先提供您的表定义 - 数据类型对您的问题至关重要。并且永远不要将代码作为图像发布。为此,我们非常喜欢 text

标签: sql postgresql postgresql-9.1


【解决方案1】:

使用to_char() 函数将timestamp 格式化为任何所需的字符串表示形式。示例:

SELECT to_char(now(), 'YYYY-MM-DD HH24:MI:SS')

将返回2016-02-26 09:37:49(没有时区)

您的查询必须是这样的:

SELECT t, to_char(to_timestamp(v), 'YYYY-MM-DD HH24:MI:SS') 
FROM c1.hour 
WHERE 
   f = 22 
   AND date_trunc('day',t - '1 hour'::INTERVAL) = '2016-02-26 00:00:00' 
ORDER BY t ;

【讨论】:

    【解决方案2】:

    指定 UTC:

    select to_timestamp(0)::timestamptz at time zone 'UTC'
    

    我在+08时区,得到以下结果:

    1970-01-01 00:00:00

    使用时区规范,我得到:

    1970-01-01 08:00:00+08

    一个优点是您不必指定日期时间格式,这可能会给用户带来意想不到的结果。系统指定的格式被保留。

    【讨论】:

    • 我相信,OP 想要的是1970-01-01 08:00:00
    • 是的,没错。 at time zone "UTC" 会这样做。
    • at time zone "UTC" 也减去 8 小时,这似乎不是 OP 想要的,而只是在您的情况下删除 +08 ,同时保持其余部分完好无损你的区域。
    【解决方案3】:

    你可以这样做 cast("你的列"作为时间戳)

    【讨论】:

    • 非常有用的方法。我最终做了trunc('minute', cast (col_timestand_with_tz as timestamp))
    猜你喜欢
    • 2013-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 2018-08-10
    • 2017-07-28
    相关资源
    最近更新 更多