如何在Oracle中将日期截断为秒

时间:2020-03-06 14:58:53  来源:igfitidea点击:

此页面提到了如何将时间戳记截断为分钟/小时/等。在Oracle中。

我们将如何以相同的方式将时间戳缩短到几秒钟?

解决方案

由于" DATE"的精度是秒(并且没有几分之一秒),因此根本不需要" TRUNC"。

数据类型" TIMESTAMP"允许几分之一秒。如果将其转换为" DATE",则小数秒将被删除,例如

select cast(systimestamp as date) 
  from dual;

要将"时间戳"截短为秒,我们可以将其转换为日期:

CAST(timestamp AS DATE)

然后在文章中执行TRUNC

TRUNC(CAST(timestamp AS DATE), 'YEAR')

关于截断Oracle日期的一般主题,这是可在日期trunc()和round()函数中使用的格式模型的文档链接

http://download.oracle.com/docs/cd/B28359_01/server.111/b28286/functions242.htm#sthref2718

未列出"秒",因为DATE数据类型的粒度为秒。

顺序为:

select to_char(current_timestamp, 'SS') from dual;

我使用了这样的功能:

FUNCTION trunc_sec(p_ts IN timestamp)
IS
    p_res timestamp;
BEGIN
    RETURN TO_TIMESTAMP(TO_CHAR(p_ts, 'YYYYMMDDHH24MI'), 'YYYYMMDDHH24MI');
END trunc_sec;

对不起,但我所有的前任似乎都错了:

从double选择cast(systimestamp作为日期)不会截断,而是舍入到下一秒。

我使用一个函数:

CREATE OR REPLACE FUNCTION TRUNC_TS(TS IN TIMESTAMP) RETURN DATE AS
BEGIN
  RETURN TS;
END;

SELECT systimestamp, trunc_ts(systimestamp) date_trunc, 
    CAST(systimestamp AS DATE) date_cast FROM dual

SYSTIMESTAMP                       DATE_TRUNC             DATE_CAST
21.01.10 15:03:34,567350 +01:00    21.01.2010 15:03:34    21.01.2010 15:03:35