如何将时间戳删除到几秒钟?

时间:2014-09-04 18:07:35

标签: oracle

给定一个时间戳值,即“04-SEP-14 03.09.09.272949000 PM”,如何将日期时间缩短到秒部分并将微秒部分归零?

鉴于:04-SEP-14 03.09.09.272949000 PM 希望:04-SEP-14 03.09.09.00 PM

提前感谢。

1 个答案:

答案 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}}无论如何。