首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在开关case语句中使用通配符更新表

在开关case语句中使用通配符更新表
EN

Stack Overflow用户
提问于 2015-06-18 05:41:36
回答 3查看 1.5K关注 0票数 1

我正在尝试使用Oracle SQL update语句使用“开关”case语句,如下所述:

代码语言:javascript
复制
update MY_TABLE SET STATE_ABBREVIATION=
(CASE STATE 
WHEN 'MAHARASHTRA' THEN 'MH'
WHEN 'ASSAM' THEN 'AS'
WHEN 'HIMACHAL%' THEN 'HP'
...
ELSE 
STATE
END
);

我从线程SQL - UPDATE中每个SET命令的哪个子句?得到了这条线索

问题是通配符字段没有像预期的那样正常工作。国家专栏可能像“喜马喀尔邦”和“喜马恰尔邦”这样的价值观。

我还搜索了https://community.oracle.com/thread/290198,其中一个答案使用了“ searched case”,效果很好。。。

代码语言:javascript
复制
CASE 
(WHEN STATE LIKE 'ANDHRA%' THEN 'AP'
 WHEN STATE LIKE 'HIMACHAL%' THEN 'HP'
END

我们如何才能在切换的情况下实现这一点?我也试过

代码语言:javascript
复制
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 -“缺少关键字”)。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-06-18 05:49:09

在任何情况下都必须使用搜索的版本。

语法图

票数 1
EN

Stack Overflow用户

发布于 2015-06-18 05:49:18

您可以在所有条件下使用LIKE,因为= 'aaaa'LIKE 'aaaa'在输出方面没有差别。

代码语言:javascript
复制
update MY_TABLE SET STATE_ABBREVIATION=
(CASE
WHEN STATE LIKE 'MAHARASHTRA' THEN 'MH'
WHEN STATE LIKE 'ASSAM' THEN 'AS'
WHEN STATE LIKE 'HIMACHAL%' THEN 'HP'
...
ELSE 
STATE
END
);
票数 0
EN

Stack Overflow用户

发布于 2015-06-18 06:25:19

在CASE表达式中使用=LIKE运算符不应该有任何问题。

例如,

代码语言:javascript
复制
SQL> CREATE TABLE t AS SELECT * FROM(
  2  WITH DATA(state) AS(
  3  SELECT 'MAHARASHTRA' FROM dual UNION ALL
  4  SELECT 'ASSAM' FROM dual UNION ALL
  5  SELECT 'HIMACHAL PRADESH' FROM dual UNION ALL
  6  SELECT 'ANDHRA PRADESH' FROM dual
  7  )
  8  SELECT * FROM DATA);

Table created.

SQL> SELECT * FROM t;

STATE
----------------
MAHARASHTRA
ASSAM
HIMACHAL PRADESH
ANDHRA PRADESH

SQL>

CASE语句

代码语言:javascript
复制
SQL> SELECT CASE
  2  WHEN state = 'MAHARASHTRA' THEN 'MH'
  3  WHEN state = 'ASSAM' THEN 'AS'
  4  WHEN state LIKE 'HIMACHAL%' THEN 'HP'
  5  ELSE state
  6  END
  7  FROM t;

CASEWHENSTATE='M
----------------
MH
AS
HP
ANDHRA PRADESH

更新语句

代码语言:javascript
复制
SQL> UPDATE t
  2    SET state = (
  3                 CASE
  4                 WHEN state = 'MAHARASHTRA' THEN 'MH'
  5                 WHEN state = 'ASSAM' THEN 'AS'
  6                 WHEN state LIKE 'HIMACHAL%' THEN 'HP'
  7                 ELSE state
  8                 END
  9                );

4 rows updated.

测试用例

代码语言:javascript
复制
SQL> select * from T;

STATE
----------------
MH
AS
HP
ANDHRA PRADESH

SQL>

因此,成功地完成了更新。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30907297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档