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 - 更新日期字段的主要内容,如果未能解决你的问题,请参考以下文章