如何在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