【问题标题】:How to truncate timestamp to minutes?如何将时间戳截断为分钟?
【发布时间】:2016-07-02 05:20:39
【问题描述】:

我必须从当前时间戳中减去 5 分钟,然后将其下限(截断)到最接近的分钟。像“2016-02-23 06:10:39.0”应该是“2016-02-23 06:05:00.0”。 我找到了减去 5 分钟的方法

 systimestamp - interval '5' minute

编辑 1: 我需要特定格式的时间戳,

 TO_TIMESTAMP((systimestamp - interval '15' minute),'YYYY-MM-DD HH24:MI:SS.ff')

但这是给了

ORA-01830: date format picture ends before converting entire input string

但我无法将它降到最近的分钟。 请帮忙。谢谢

【问题讨论】:

  • select TO_TIMESTAMP(trunc(SYSTIMESTAMP - INTERVAL '5' MINUTE, 'MI'),'YYYY-MM-DD HH24:MI:SS.ff') from dual;每当我执行时,此查询都会给出 16-MAR-16 12.00.00.000000000 AM
  • DATETIMESTAMP 数据类型没有任何格式。如果您想要一个格式化的值,那么您需要使用TO_CHAR() 并将其转换为字符串,或者您可以使用NLS_TIMESTAMP_FORMAT 参数设置SQL 客户端的默认格式。如果您想截断日期/时间,请使用TRUNC()
  • @Jaydeep TRUNC() timestamp 将返回 date。因此,如果您希望输出为时间戳,则将日期显式转换为时间戳。
  • 谢谢。 CAST 就像一个魅力

标签: sql oracle timestamp timestamp-arithmetic


【解决方案1】:

您可以以您想要的精度使用 TRUNC()。要只截断到几分钟,请使用MI

例如,

SQL> SELECT SYSTIMESTAMP, trunc(SYSTIMESTAMP - INTERVAL '5' MINUTE, 'MI') new_tmstmp
  2  FROM dual;

SYSTIMESTAMP                        NEW_TMSTMP
----------------------------------- -------------------
16-MAR-16 04.44.02.379000 PM +05:30 03/16/2016 16:39:00

SQL>

请记住,上面的输出将是 DATE 而不是 TIMESTAMP。您可以将date 显式CAST 转换为timestamp

SQL> SELECT SYSTIMESTAMP,CAST(trunc(SYSTIMESTAMP - INTERVAL '5' MINUTE,'MI') AS TIMESTAMP) tm
  2  FROM dual;

SYSTIMESTAMP                        TM
----------------------------------- ------------------------------
16-MAR-16 04.53.25.802000 PM +05:30 2016-03-16 04:48:00.000000

SQL>

【讨论】:

    【解决方案2】:

    你可以使用trunc():

    trunc(systimestamp - interval '5' minute, 'minute')
    

    【讨论】:

      猜你喜欢
      • 2018-03-24
      • 2016-03-17
      • 1970-01-01
      • 1970-01-01
      • 2011-07-03
      • 2011-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多