【发布时间】:2008-10-01 15:23:35
【问题描述】:
This page 提到如何将时间戳截断为分钟/小时/等。在甲骨文中。
如何以同样的方式将时间戳缩短为秒?
【问题讨论】:
This page 提到如何将时间戳截断为分钟/小时/等。在甲骨文中。
如何以同样的方式将时间戳缩短为秒?
【问题讨论】:
由于DATE 的精度是秒(并且没有秒的小数部分),所以根本不需要TRUNC。
数据类型TIMESTAMP 允许几分之一秒。如果您将其转换为 DATE,则会删除小数秒 - 例如
select cast(systimestamp as date)
from dual;
【讨论】:
select cast(systimestamp as date) from dual; 返回12/27/2019 7:54:35 AM
12/27/2019 7:54:35.534648.
12/27/2019 7:54
对不起,我的前辈们似乎都错了。
select cast(systimestamp as date) from dual
..不截断,而是舍入到下一秒。
我使用一个函数:
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
【讨论】:
关于截断 Oracle 日期的一般主题,这里是可用于日期 trunc() 和 round() 函数的格式模型的文档链接
http://download.oracle.com/docs/cd/B28359_01/server.111/b28286/functions242.htm#sthref2718
“秒”未列出,因为 DATE 数据类型的粒度为秒。
【讨论】:
我用过这样的函数:
FUNCTION trunc_sec(p_ts IN timestamp)
IS
p_res timestamp;
BEGIN
RETURN TO_TIMESTAMP(TO_CHAR(p_ts, 'YYYYMMDDHH24MI'), 'YYYYMMDDHH24MI');
END trunc_sec;
【讨论】:
仅将工作截断到最小值,转换为日期to_char(START_TIME,'YYYYMMDDHH24MISS')
或者干脆select to_char(current_timestamp, 'YYYYMMDDHH24MISS') from dual;
https://www.techonthenet.com/oracle/functions/trunc_date.php
【讨论】:
要将timestamp 截断为秒,您可以将其转换为日期:
CAST(timestamp AS DATE)
然后执行文章中的TRUNC:
TRUNC(CAST(timestamp AS DATE), 'YEAR')
【讨论】:
某事的顺序:
select to_char(current_timestamp, 'SS') from dual;
【讨论】:
SS 不是 to_char 的有效格式,并且以ORA-01899: bad precision specifier 失败。它也没有被列为可行的选项:docs.oracle.com/cd/B19306_01/server.102/b14200/…