Sql 使用不同的日期值更新oracle日期列
当更新旧日期为新日期时,我得到 SQL错误:ORA-00932:不一致的数据类型:预期的日期为 93200000-“不一致的数据类型:应为%s获得%s”Sql 使用不同的日期值更新oracle日期列,sql,oracle,sql-update,Sql,Oracle,Sql Update,当更新旧日期为新日期时,我得到 SQL错误:ORA-00932:不一致的数据类型:预期的日期为 93200000-“不一致的数据类型:应为%s获得%s” 使用显式DATEliterals表达逻辑是否解决了问题 UPDATE test SET date1 = (CASE date1 WHEN DATE '2019-10-22' THEN DATE '2019-10-23' WHEN DATE '2019-1
使用显式
DATE
literals表达逻辑是否解决了问题
UPDATE test
SET date1 = (CASE date1
WHEN DATE '2019-10-22' THEN DATE '2019-10-23'
WHEN DATE '2019-10-21' THEN DATE '2019-10-22'
. . .
END);
正如错误消息所暗示的,您混合了日期和varchar
您当前的查询将把案例中未包含的所有其他日期更新为NULL。最好对日期文字使用WHERE条件,然后只需添加1天:
UPDATE test
SET date1 = date1 + 1
WHERE DATE1 IN
( DATE '2019-10-22'
,DATE '2019-10-21'
,DATE '2019-10-20'
, etc.
)
这将有助于:
update test
set date1 =
(
case date1
when to_date('22-OCT-19', 'dd-mon-yyyy') THEN to_date('23-OCT-19', 'dd-mon-yyyy')
else date1
end
);
以下是您当前的查询将把案例中未包含的所有其他日期更新为空。您最好在这些日期中使用WHERE条件,然后简单地加上1天。@dnoeth我相信通过在我的答案中使用我的示例,OP将避免……我认为这对此类数据不起作用。演示:它失败了,因为您插入的日期是0019年,而不是2019年,两位数的年份是不好的:-)请看,当您切换到标准SQL日期文字时,它要短得多,并且不再需要
to_date
,因为只有一种格式YYYY-MM-DD
我插入了OP在他问题中提到的日期“当'19年10月22日'然后'19年10月23日'"... 我假设OP在他的桌子上就是这样做的。我试过了,但没有成功:@VBokšIć。SQL FIDLE中没有错误。我同意,但它不会更新日期:当日期“2019-10-22”时,然后是日期“2019-10-23”?@VBokšIć。您可能只需要在更新
之后进行提交
——这在Oracle的Fiddle环境中很难做到。我的示例不需要任何提交,从这个角度来看,我已经对您的代码和OP中接受的代码进行了注释。如您所见
update test
set date1 =
(
case date1
when to_date('22-OCT-19', 'dd-mon-yyyy') THEN to_date('23-OCT-19', 'dd-mon-yyyy')
else date1
end
);