SQL中的日期更新

时间:2014-02-05 13:49:12

标签: sql oracle

队 我在SQL DATE遇到了一个问题。

我有一份X_RECEIVED_DATE = 1/1/753。

我正在尝试更新该字段,如下所示

update table_contract set x_received_date=
to_date(TO_CHAR(X_RECEIVED_DATE-24/24,'mm/dd/yy hh:mi:ss PM')) where objid=268865360 

即时通讯尝试使用此更新字段,但它正在抛出并出错 “ORA-01843:不是有效月份”

请帮助我,并提供一些快速的想法

2 个答案:

答案 0 :(得分:1)

所以这就是你似乎在做的事情:

  • 从日期减去一天(使用24/24
  • 将其转换为具有特定格式的字符串
  • 转换回转换为日期但未指定格式

我的猜测是数据库在尝试解析日期时无法推断格式。但是没有必要将它转换为我能看到的字符串并返回

你应该能够做到:

UPDATE table_contract 
SET x_received_date = x_received_date-1
WHERE objid=268865360

根据您的评论,您试图表明解析具有两位数年份的日期不会为您提供原始日期。如果是这种情况,则只需在解析时指定日期格式:

to_date(
       TO_CHAR(X_RECEIVED_DATE-24/24
               ,'mm/dd/yy hh:mi:ss PM')
       ,'mm/dd/yy hh:mi:ss PM')

答案 1 :(得分:0)

date字段中减去一个整数会得到date - 没有理由将其转换为char,然后再转回date:< / p>

UPDATE table_contract 
SET    x_received_date = X_RECEIVED_DATE - 24/24
WHERE  objid = 268865360