[英]oracle, sql date function
我想更新我的日期列,需要增加35秒。 我用这个查询:
UPDATE temp_table SET dpdate = dpdate + 35 / 86400 ;
这是问题所在:
EXISTING AFTER Update
-------------------- --------------------
02-JUN-2017 02:06:13 02-JUN-2017 02:06:48
02-JUN-2017 02:06:14 02-JUN-2017 02:06:49
19-MAY-2017 02:05:47 19-MAY-2017 02:05:22
注意:我运行了上面的查询,下面的所有结果都是在运行该更新查询之后的。
在前两行中,它运行良好,但在最后一行中,它应该到达02:06:22
但它是02:05:22
。
当我按日期排序时,首先出现19-MAY-2017 02:05:47
然后是19-MAY-2017 02:05:22
。
不知道为什么分钟字段不增加,以及排序顺序如何, 19-MAY-2017 02:05:47
首先出现。
排序的几个例子是正确的,前四个是正确的,但是您可以看到最后两个的问题:
A 01-DEC-2014 12:12:00
C 01-DEC-2014 12:12:35
A 01-JUL-2016 05:07:33
C 01-JUL-2016 05:07:08
A 29-JAN-2016 04:01:08
C 29-JAN-2016 04:01:43
A 26-FEB-2016 04:02:09
C 26-FEB-2016 04:02:44
A 11-MAR-2016 03:03:13
C 11-MAR-2016 03:03:48
A 08-APR-2016 04:04:35
C 08-APR-2016 04:04:10
我的问题:为什么分钟字段没有更新?
我敢打赌,您正在使用: to_char(dpdate, 'dd-MON-yyyy hh24mmss')
以显示日期(该日期,或者您的NLS_DATE_FORMAT参数已使用该格式掩码更改了)-注意时间部分的mm
。 mm
用于获取月数,而您可能需要mi
来获取分钟。
例如:
WITH sample_data AS (SELECT to_date('02-JUN-2017 02:06:13', 'dd-MON-yyyy hh24:mi:ss') dpdate FROM dual UNION ALL
SELECT to_date('02-JUN-2017 02:06:14', 'dd-MON-yyyy hh24:mi:ss') dpdate FROM dual UNION ALL
SELECT to_date('19-MAY-2017 02:05:47', 'dd-MON-yyyy hh24:mi:ss') dpdate FROM dual)
SELECT to_char(dpdate, 'dd/mm/yyyy hh24:mi:ss') dpdate,
to_char(dpdate + 35/(24*60*60), 'dd/mm/yyyy hh24:mm:ss') incorrect_new_dpdate_display,
to_char(dpdate + 35/(24*60*60), 'dd/mm/yyyy hh24:mi:ss') correct_new_dpdate_display
FROM sample_data;
DPDATE INCORRECT_NEW_DPDATE_DISPLAY CORRECT_NEW_DPDATE_DISPLAY
------------------- ---------------------------- --------------------------
02/06/2017 02:06:13 02/06/2017 02:06:48 02/06/2017 02:06:48
02/06/2017 02:06:14 02/06/2017 02:06:49 02/06/2017 02:06:49
19/05/2017 02:05:47 19/05/2017 02:05:22 19/05/2017 02:06:22
您确定操作正常吗?
检查此查询,它工作正常,更改了分钟:
select current_date,current_date + 35 / 86400 from dual
您可以使用INTERVAL
UPDATE temp_table SET dpdate = dpdate + INTERVAL '35' SECOND;
在Oracle 11g
它可以正常工作,并且还可以更新分钟。 与算术表达式相比,它也更易于阅读。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.