Oracle - 更新日期字段

Posted

技术标签:

【中文标题】Oracle - 更新日期字段【英文标题】:Oracle - Update date field 【发布时间】:2019-07-29 14:37:27 【问题描述】:

我有一个名为schedule_finish 的字段,我想更新它,但是当我更新时,前端的日期显示比数据库中的日期晚一天。 IE。当我将日期更新为30-AUG-19 时,前端显示的是 8 月 29 日。我可以通过在要更新字段的日期上添加一秒来解决此问题,但我不确定在这种情况下该怎么做。

这是我的 SQL:

update inv_investments
set schedule_finish = TRUNC('30-AUG-19') + 1/(24*60*60)
where id=5064001;

但这给了我错误:

ORA-00932: inconsistent datatypes: expected DATE got NUMBER

但是,例如,如果我这样做,它会起作用:

update inv_investments
set schedule_finish = TRUNC(updated_date) + 1/(24*60*60)
where id=5064001;

/* where updated_date field is '30-AUG-19' */
/* shows same date on both back and front end as desired */

有没有办法将我想要更新字段的日期存储在一个变量中,然后在更新语句中引用该变量,和/或有更好的方法来实现这一点?

提前致谢

【问题讨论】:

为什么是复杂的+ 1/(24*60*60) 而不是更简单的+ interval '1' second @a_horse_with_no_name 为什么这是更好的选择?我想它在某种意义上可以被认为更简单,但实际上并没有太大区别。 【参考方案1】:

您正在添加到一个字符串。字符串必须转换为日期

update inv_investments
  set schedule_finish = TO_DATE('30-AUG-19','dd-MON-yy') + 1/(24*60*60)
  where id=5064001;

【讨论】:

对……完美。 Tks【参考方案2】:

你应该可以这样做:

set schedule_finish = DATE '2019-08-30'

您应该会在 8 月 30 日到达。如果你不是,那么一些高度可疑的事情正在发生。一种可能性是时区问题。但是,增加一秒并不能解决这个问题。

【讨论】:

不是时区问题。这与系统如何解释日期有关。我完全忘记了问题是什么,但如果是秒、毫秒等。 0:00:00 为当天,总是取前一天。在日期上加一秒可以解决系统中的这个问题。

以上是关于Oracle - 更新日期字段的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 更新非索引和非分区表的有效方法?

如何从 select 进行 Oracle SQL 更新?

如何防止在 EDMX 更新后删除字段

Oracle 更新语句无法正常工作

Oracle修改数据库的日期

在 oracle 中按顺序更新