【问题标题】:Add two hours to timestamp将两个小时添加到时间戳
【发布时间】:2015-05-11 10:06:36
【问题描述】:

我有一个触发器,它必须将时间戳设置为当前时间加上插入前字段为空的两个小时。到目前为止,我尝试过的一种说法是

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

【问题讨论】:

    标签: sql oracle plsql timestamp intervals


    【解决方案1】:

    您需要更改您的 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
    

    【讨论】:

    • 这个甚至在 5 年后为我节省了很多工作
    【解决方案2】:

    Altherinterval真的很方便,我经常这样写:

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

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

    【讨论】:

    • 这会将值重铸为 DATE。这样的表达式有效:SELECT TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD HH24:MI:SS.FF') FROM DUAL; 但这样的表达式会中断:SELECT TO_CHAR(SYSTIMESTAMP + 2 / 24, 'YYYY-MM-DD HH24:MI:SS.FF') FROM DUAL;
    猜你喜欢
    • 2010-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    • 2019-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多