我有两个时间戳:
说:
21.10.2013 00:00:23
和
21.10.2013 00:00:00
如何将时间戳 1 的 23 秒添加到秒。
我的查询目前是这样的:
select count(1)
from tbl where timestamp1 >= NVL((select MAX(TIMESTAMP2) + ("Seconds from TS 1")
from tbl2), timestamp - 1);
尝试:
timestamp2 + (extract (second from timestamp1)/86400)
作为替代方案,您可以从第一个时间戳获取秒(或分钟和秒,或整个时间部分)作为间隔,并将其添加到第二个时间戳。
该TRUNC(date)
函数接受一个确定精度的参数;如果你通过DD
(默认),那么它会去掉整个时间,如果你通过,HH24
那么它会保留小时,但会去掉分钟及以下的时间,等等。结果是一个日期,但是如果你从时间戳中减去它,结果是一个间隔(如文档所说)。
您可以看到使用此演示创建的间隔:
with t as (
select to_timestamp('2013-11-06 09:10:11', 'YYYY-MM-DD HH24:MI:SS') as ts1
from dual
)
select ts1,
ts1 - trunc(ts1, 'MI') as second_interval,
ts1 - trunc(ts1, 'HH24') as minute_interval,
ts1 - trunc(ts1, 'DD') as hour_interval
from t;
TS1 SECOND_INTERVAL MINUTE_INTERVAL HOUR_INTERVAL
----------------------- --------------- --------------- -------------
2013-11-06 09:10:11.000 0 0:0:11.0 0 0:10:11.0 0 9:10:11.0
然后,您可以将间隔添加到您的其他时间戳:
with t as (
select to_timestamp('2013-11-06 09:10:11', 'YYYY-MM-DD HH24:MI:SS') as ts1,
to_timestamp('2013-10-31 00:00:00', 'YYYY-MM-DD HH24:MI:SS') as ts2
from dual
)
select ts2 + (ts1 - trunc(ts1, 'MI')) as ts2_second_adj,
ts2 + (ts1 - trunc(ts1, 'HH24')) as ts2_minute_adj,
ts2 + (ts1 - trunc(ts1, 'DD')) as ts2_hour_adj
from t;
TS2_SECOND_ADJ TS2_MINUTE_ADJ TS2_HOUR_ADJ
----------------------- ----------------------- -----------------------
2013-10-31 00:00:11.000 2013-10-31 00:10:11.000 2013-10-31 09:10:11.000
如果您得到的时间不止一部分,那么这可能比进行多次extract
调用并且必须将它们除以正确的值(86400 秒等)要简单一些。这也保留了时间戳中的小数秒,这可能是可取的,也可能不是可取的。
这种方法也适用于DATE
values,而extract
版本不适用。