添加两个小时到时间戳

时间:2015-05-11 10:06:36

标签: sql oracle plsql timestamp intervals

我有一个触发器,必须将时间戳设置为当前时间加上插入前字段为空时的两个小时。我到目前为止所做的一个陈述是

IF :new.time_to_live IS NULL THEN
    :new.time_to_live := sysdate + INTERVAL '0 02:00:00.0' HOUR TO MINUTE;
END IF;

但是我得到第二行的PLS-00166错误(日期,时间,时间戳或间隔文字的格式错误)。还修改了多个论坛中的几个建议,但错误仍然存​​在。该列创建如下:

time_to_live timestamp(0) NOT NULL

2 个答案:

答案 0 :(得分:11)

您需要更改HOUR TO MINUTE以匹配您实际传递的值:

sysdate + INTERVAL '0 02:00:00.0' DAY TO SECOND

您可能还想使用systimestamp代替sysdate。如果你总是加上两个小时,你也可以使用更短的间隔文字:

systimestamp + INTERVAL '02:00' HOUR TO MINUTE

或只是

systimestamp + INTERVAL '2' HOUR

快速演示:

SELECT systimestamp, systimestamp + INTERVAL '2' HOUR FROM DUAL;

SYSTIMESTAMP                        SYSTIMESTAMP+INTERVAL'2'HOUR      
----------------------------------- -----------------------------------
11-MAY-15 11.15.22.235029000 +01:00 11-MAY-15 13.15.22.235029000 +01:00

答案 1 :(得分:4)

Alther interval真的很方便,我经常把它写成:

IF :new.time_to_live IS NULL THEN
    :new.time_to_live := sysdate + 2 / 24.0
END IF;

将日期添加到日期将被视为天数。 “2/24”是两个小时。