【发布时间】:2015-06-18 05:41:36
【问题描述】:
我正在尝试使用如下所述的“SWITCHED”案例语句来使用 Oracle SQL 更新语句:
update MY_TABLE SET STATE_ABBREVIATION=
(CASE STATE
WHEN 'MAHARASHTRA' THEN 'MH'
WHEN 'ASSAM' THEN 'AS'
WHEN 'HIMACHAL%' THEN 'HP'
...
ELSE
STATE
END
);
我从线程SQL - WHERE clause on each SET command in UPDATE?得到这个线索
问题是通配符字段未按预期运行。 State 列的值可能类似于“Himachal Pradesh”和“HimachalPradesh”。
我还搜索了https://community.oracle.com/thread/290198,其中一个答案使用了“searched case”,效果很好。 ..
CASE
(WHEN STATE LIKE 'ANDHRA%' THEN 'AP'
WHEN STATE LIKE 'HIMACHAL%' THEN 'HP'
END
我们如何在 SWITCHED 案例风格中实现这一点? 我也试过了
update MY_TABLE SET STATE_ABBREVIATION=
(CASE STATE
WHEN 'MAHARASHTRA' THEN 'MH'
WHEN 'ASSAM' THEN 'AS'
WHEN LIKE 'HIMACHAL%' THEN 'HP'
...
ELSE
STATE
END
);
这也不起作用。
(SQL 错误:ORA-00905:缺少关键字 00905. 00000 - “缺少关键字”)。
【问题讨论】:
-
这两种swich case表格不能混用。
-
@ibre5041 在CASE表达式中使用
=和LIKE操作符没有问题 -
@LalitKumarB,下面提到的解决方案与我在问题中提到的community.oracle.com/thread/290198 中提到的解决方案相同。我在那里用 'LIKE' 代替运算符 '=' 没有问题。我的问题是我是否能够在上面的 switch case 样式中使用此类运算符,它通常与 'WHEN' ..'THEN' 组合一起使用,但不允许我使用引用状态的 'LIKE' 运算符。如果可行,请指出。
-
@LalitKumarB,换句话说,我想避免键入 WHEN STATE =' ' THEN ' ' 或 STATE LIKE ' ' THEN ' ' 一百次。似乎没有直接的解决方案。如果数据在整个过程中不一致(例如,喜马偕尔邦和喜马偕尔邦),我必须忍受它。你能帮忙解决这个问题吗?任何替代解决方法也可以帮助我。感谢您在下面的详细解释。
-
@Vvn 要在您的情况下使用不同的运算符使用多个条件,只有搜索到的情况才有效。