【问题标题】:How to round off milliseconds value from timestamp(0) in PostgreSQL?如何从 PostgreSQL 中的时间戳(0)中舍入毫秒值?
【发布时间】:2019-07-26 21:57:29
【问题描述】:

我需要从timestamp(0) without time zone 中舍入毫秒值。

例如:2018-04-19 10:43:13.719 到 2018-04-19 10:43:13.000

【问题讨论】:

  • 你的意思是 round 还是 truncate 如你的例子所示?此外,timestamp(0) 不存储毫秒数。这就是附加的(0) 的用途。您是否可能有不同的源类型,并且只有目标是 timestamp(0) 并且想要在分配中截断而不是舍入?还是显示问题?

标签: postgresql timestamp rounding


【解决方案1】:

你可以使用函数date_trunc:

SELECT date_trunc('seconds', '2018-04-19 10:43:13.719'::timestamp);

【讨论】:

  • 这将仅显示 2018-04-19 10:43:13 丢弃的毫秒数。毫秒值应该四舍五入。
  • 只有设置了毫秒才会显示。如果你真的想在最后显示.000,你可以做truncated_ts::text || '.000'
【解决方案2】:

这不适用于您建议的timestamp(0),因为该类型不存储毫秒开始。对文字输入或timestamp(没有精度修饰符)有意义。

四舍五入时间戳'2018-04-19 10:43:13.719' 将给您'2018-04-19 10:43:14'(四舍五入向上)。

截断微秒,您可以使用date_trunc(),就像 Lorenz 已经提供的那样。根据您的评论,您仍然需要多余的悬空“.000”。为了展示我建议to_char():

SELECT to_char(date_trunc('seconds', timestamp '2018-04-19 10:43:13.719'), 'YYYY-MM-DD HH24:MI:SS.MS')

或者更便宜,直接在 to_char() 后面附加 '.000' 而不是实际毫秒数:

SELECT to_char(timestamp '2018-04-19 10:43:13.719', 'YYYY-MM-DD HH24:MI:SS<b>".000"</b>')

The manual:

to_char 模板中允许使用普通文本并将输出 字面上地。您可以将子字符串放在双引号中以强制它成为 解释为文字文本,即使它包含模板模式。

【讨论】:

    猜你喜欢
    • 2014-07-19
    • 2012-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    相关资源
    最近更新 更多