带时区的Oracle时间戳:将日期部分替换为当前日期

时间:2017-06-03 04:15:37

标签: sql database date timestamp oracle12c

我有一个oracle表来维持截止时间。这里我们存储了各种证券的截止时间。目前我们是截止到1970年1月1日的默认日期部分。要求是用当前日期替换这个日期部分而不改变截止时间和时区部分。

1 个答案:

答案 0 :(得分:1)

您可以计算今天和1970-01-01之间的天数,然后将其作为每日间隔添加到截止时间戳值:

create table my_table (cutoff timestamp with time zone);

insert into my_table values (timestamp '1970-01-01 18:00:00 -5:00');

select cutoff + numtodsinterval(trunc(sysdate) - date '1970-01-01', 'DAY') as adjusted
from my_table;

ADJUSTED                           
-----------------------------------
05-JUN-17 18.00.00.000000000 -05:00

或者如果您愿意,可以直接生成间隔(如@mathguy指出的那样):

select cutoff + (trunc(sysdate) - timestamp '1970-01-01 00:00:00') as adjusted
from my_table;

ADJUSTED                 
-------------------------
06-JUN-17 18:00:00 -05:00

当然,-05:00时区偏移会忽略夏令时,但这似乎与您的意图相同。