PL / SQL:向时间戳添加分钟只会增加毫秒数

时间:2016-02-04 07:37:14

标签: oracle plsql

我遇到的问题是,在我的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;

我知道我做错了什么,因为我需要在我的解决方案中使用第一个示例代码?

2 个答案:

答案 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