【问题标题】:Discard millisecond part from timestamp从时间戳中丢弃毫秒部分
【发布时间】:2012-04-30 02:07:57
【问题描述】:

如何丢弃/舍入millisecond 部分,如果second 部分也从timestamp w/o timezone 中删除更好?

【问题讨论】:

    标签: sql postgresql casting timestamp rounding


    【解决方案1】:

    投射到timestamp(0)timestamptz(0) 轮回 到整秒:

    SELECT now()::timestamp(0);
    

    分数不存储在这种类型的表列中。

    date_trunc() 截断(保持秒数不变)——这通常是你真正想要的:

    SELECT date_trunc('second', now()::timestamp);
    

    【讨论】:

    • 请注意,timestamp(0) 和 timestamptz(0) 将舍入而不是截断。如果您想按原样保留时间戳的其余部分,请使用 date_trunc。
    • 不起作用,它会抛出错误[Amazon](500310) Invalid operation: Assert
    • @SlavikMeltser:我的答案中的表达式在 Postgres 中有效。 100%。您的问题显然有不同的原因。
    • @ErwinBrandstetter 我正在使用 Amazon Redshift。可能他们已经在 Redshift 中删除了这个功能。
    • @SlavikMeltser:Redshift 不是 Postgres。它是从 Postgres 8.0 版分叉出来的 - 非常 很久以前。
    【解决方案2】:

    丢弃毫秒数:

    SELECT DATE_TRUNC('second', CURRENT_TIMESTAMP::timestamp);
    

    2019-08-23 16:42:43

    丢弃秒数:

    SELECT DATE_TRUNC('minute', CURRENT_TIMESTAMP::timestamp);
    

    2019-08-23 16:42:00

    【讨论】:

      【解决方案3】:

      如果你只是想要时间,这里是 postgres 的代码

      SELECT DATE_TRUNC('second', CURRENT_TIMESTAMP::timestamp)::time;
      

      它将返回“没有时区的时间”数据类型

      【讨论】:

        猜你喜欢
        • 2014-11-04
        • 2022-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-22
        • 1970-01-01
        相关资源
        最近更新 更多