0

我有两个时间戳:

说:

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);
4

2 回答 2

4

尝试:

timestamp2  + (extract (second from timestamp1)/86400) 
于 2013-11-06T14:31:48.923 回答
2

作为替代方案,您可以从第一个时间戳获取秒(或分钟和秒,或整个时间部分)作为间隔,并将其添加到第二个时间戳。

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 

SQL 小提琴

如果您得到的时间不止一部分,那么这可能比进行多次extract调用并且必须将它们除以正确的值(86400 秒等)要简单一些。这也保留了时间戳中的小数秒,这可能是可取的,也可能不是可取的。

这种方法也适用于DATEvalues,而extract版本不适用。

于 2013-11-06T17:50:25.003 回答