给定一个时间戳值,即“04-SEP-14 03.09.09.272949000 PM”,如何将日期时间缩短到秒部分并将微秒部分归零?
鉴于:04-SEP-14 03.09.09.272949000 PM 希望:04-SEP-14 03.09.09.00 PM
提前感谢。
答案 0 :(得分:2)
您可以使用the cast
function将其转换为带有构造的零毫秒TIMESTAMP:
cast(<your column>, timestamp(0))
使用CTE传递您的值:
with t as (
select to_timestamp('04-SEP-14 03.09.09.272949000 PM',
'DD-MON-RR HH:MI:SS.FF AM') as tstamp
from dual
)
select to_char(cast(tstamp as timestamp(0)), 'DD-MON-RR HH:MI:SS.FF2 AM')
from t;
TO_CHAR(CAST(TSTAMPASTIMESTAMP(0)),'DD-M
----------------------------------------
04-SEP-14 03:09:09.00 PM
您也可以将它投两次,一次到DATE
以消除毫秒,然后再次回到TIMESTAMP:
with t as (
select to_timestamp('04-SEP-14 03.09.09.272949000 PM',
'DD-MON-RR HH:MI:SS.FF AM') as tstamp
from dual
)
select to_char(cast(cast(tstamp as date) as timestamp),
'DD-MON-RR HH:MI:SS.FF2 AM')
from t;
TO_CHAR(CAST(CAST(TSTAMPASDATE)ASTIMESTA
----------------------------------------
04-SEP-14 03:09:09.00 PM
......正在做更多的工作以及更多的打字。
您无法使用trunc(date)
,因为它会将TIMESTAMP隐式转换为DATE,并且由于DATE已经达到该精度,因此您无法将SS
作为{fmt
传递1}}无论如何。