因此,我试图使用case语句来更新具有许多特定条件的表中的列。我下面的代码应该很清楚我的目标是什么,但我得到了一个错误:
ERROR: Operand of WHEN clause 1 is not the same data type as the CASE operand.
ERROR: Operand of WHEN clause 3 is not the same data type as the CASE operand.
ERROR: Operand of WHEN clause 4 is not the same data type as the CASE operand.
ERROR: Operand of WHEN clause 5 is not the same data type as the CASE operand.
ERROR: Operand of WHEN clause 6 is not the same data type as the CASE operand.
我相信这是因为or语句是逻辑的,而不是字符串,因为它们应该在右边?代码如下,如有帮助,不胜感激。
update cat_rotn_data
set rotn_ac_typ_cd = case rotn_ac_typ_cd
when '31J' or '320' or '321' or '319' or'32K' or'32M' or'32R' or'3HF' or'3KR' or'3MR' then '320'
when '717' then '717'
when 'M88' or 'M90' or 'M9K' then 'M88'
when '738' or'739' or '73A' or '73E' or '73W' or '73H' or '700' then '73N'
when '332' or '333' or '33X' or '339' or '330' then '330'
when '757' or '75C' or '75D' or '75G' or '75H' or '75P' or '75S' or '75Y' or '76L' or '76P' or '76Q' or '76T' or '76Z' or '75N' or'7ER' then '7ER'
when '777' or '77B' or '7HD' or '7HB' or '7CD' or '7CB' then '777'
else 'ERROR'
end;
每个when
条件都需要一个布尔表达式:
set rotn_ac_typ_cd = case
(case when rotn_ac_typ_cd in ('31J', '320', '321', '319', '32K', '32M', '32R', '3HF', '3KR', '3MR')
then '320'
when rotn_ac_typ_cd in ('717')
then '717'
. . .
else 'ERROR'
end);
or
——在SQL中——连接布尔表达式,而您正使用它来连接字符串,这导致了您的错误。
您可以使用IN,而不是在语句中使用多个OR。在update语句中,当rotn_ac_typ_cd的值为"M90"或"M9K"或"M88"时,您期望的是"M88"。一个WHEN语句只能开出一张支票。如果你仍然想使用OR,那么你可以做下面的
update cat_rotn_data
set rotn_ac_typ_cd = case WHEN rotn_ac_typ_cd= 'M88' THEN 'M88'
WHEN rotn_ac_typ_cd= 'M0' THEN 'M88'
WHEN rotn_ac_typ_cd= 'M9K' THEN 'M88'
else ... end
但这将使您的查询更大,您可以简单地使用IN.
update cat_rotn_dat
set rotn_ac_typ_cd = case WHEN rotn_ac_typ_cd IN ('M88', 'M90', 'M9K') THEN 'M88'
else ... end