我遇到的问题是,在我的timestamp对象中添加分钟只会增加毫秒数。我正在使用PL / SQL
这是我的代码:
DECLARE
V_DUEDATE TIMESTAMP;
BEGIN
SELECT
CASE
WHEN 1 = 1
THEN to_timestamp('03/FEB/2016 14:02:08.50948', 'DD/MON/YYYY HH24:MI:SS.FF') + 15/1440
ELSE to_timestamp('03/FEB/2016 14:02:08.50948', 'DD/MON/YYYY HH24:MI:SS.FF')
END
INTO V_DUEDATE
FROM DUAL;
DBMS_OUTPUT.PUT_LINE('new duedate:'||TO_CHAR(V_DUEDATE, 'DD/MON/YYYY HH24:MM:SS.SSSSS'));
END;
上述CASE语句的输出返回03/FEB/2016 14:02:08.51428
,增加了480毫秒。
但是当我运行以下内容时,会进行正确的增加:
select to_timestamp('03/FEB/2016 14:02:08.50948'), to_timestamp('03/FEB/2016 14:02:08.50948') + 15/1440 from dual;
我知道我做错了什么,因为我需要在我的解决方案中使用第一个示例代码?
答案 0 :(得分:2)
在您的第一篇文章中,您似乎将日期转换为HH24: MM :SS.SSSSS而不是HH24: MI :SS.SSSSS。所以你要显示几个月,而不是几分钟。 不知道为什么它会添加MS,因为你试图增加15分钟。但这无关紧要
答案 1 :(得分:1)
当你这样做时
to_timestamp('03/FEB/2016 14:02:08.50948', 'DD/MON/YYYY HH24:MI:SS.FF') + 15/1440
然后TIMESTAMP
值隐式转换为DATE
值。通过这个你松开小数秒,结果是" 03 / FEB / 2016 14:17:08。 00000 "
更好地使用
to_timestamp('03/FEB/2016 14:02:08.50948', 'DD/MON/YYYY HH24:MI:SS.FF')
+ INTERVAL '15' MINUTE
或
to_timestamp('03/FEB/2016 14:02:08.50948', 'DD/MON/YYYY HH24:MI:SS.FF')
+ 15 * INTERVAL '1' MINUTE