Sql 使用CASE WHEN和LIKE对多个字符串值进行多次更新?

Sql 使用CASE WHEN和LIKE对多个字符串值进行多次更新?,sql,Sql,我试图根据几个条件更新表中的几个值。如果一个列(我们称之为“name”)包含一组字符串,我想将其名称更改为其他名称。例如,如果名称包含两个连续的a,如“aa”,我想将其更改为“a” 以下是我的查询,当前不起作用: UPDATE table SET name = CASE name WHEN name like "%aa%" then "A" WHEN name like "%er%" then "E

我试图根据几个条件更新表中的几个值。如果一个列(我们称之为“name”)包含一组字符串,我想将其名称更改为其他名称。例如,如果名称包含两个连续的a,如“aa”,我想将其更改为“a”

以下是我的查询,当前不起作用:

UPDATE table
   SET name = CASE name 
                      WHEN name like "%aa%" then "A" 
                      WHEN name like "%er%" then "E"
                      ELSE "Z"
                      END
 WHERE name is not null

我知道这是一个非理性的例子,但我不擅长当场提出这些。我当前遇到的错误是:

参数类型的运算符大小写没有匹配的签名:STRING,BOOL,STRING,BOOL,STRING,STRING at[2:18]


有什么想法吗?

删除
案例
子句中的第一个
名称

UPDATE table
   SET name = CASE WHEN name like "%aa%" then "A" 
                   WHEN name like "%er%" then "E"
                   ELSE "Z"
                   END
 WHERE name is not null

案例名称
中删除
名称
,并将双引号
替换为单引号

UPDATE table
   SET name = CASE 
                      WHEN name like '%aa%' then 'A' 
                      WHEN name like '%er%' then 'E'
                      ELSE 'Z'
                      END
 WHERE name is not null
另外,在本例和您的问题查询中,单词table是表的名称,而不是关键字table。这意味着,在某些数据库中,您将遇到问题,并且必须将这个词加引号

您可以看到,当您将word table放在引号中时,我的答案中的查询将在MySQL数据库中工作

您可以看到,当您将word table放在双引号中时,我的答案中的查询将在Oracle数据库中工作。您还将看到,在Oracle中,字符串(列的值)不能位于双引号之间


注意:如果字符串(列值)位于双引号之间,某些数据库不会导致错误,但最好使用单引号,因为您没有标记您使用的数据库,这有一些指导原则可以帮助您。

正是穿刺者所说的,删除
大小写
子句中的第一个
名称
。SQL语法不直接在大小写后调用列名。例如(来自W3学校):


祝你好运

删除单词名称的第一个实例

UPDATE table
   SET name = CASE 
                      WHEN name like "%aa%" then "A" 
                      WHEN name like "%er%" then "E"
                      ELSE "Z"
                      END
 WHERE name is not null
使用用例有两种方法:

1) 当name=1时为CASE,当name=2时为CASE,则

2) 案例名称当1时,然后当2时,然后

在第一种情况下,它查找第一个真表达式,在第二种情况下查找等于name的第一个表达式。 您将这两种形式混合在一起,但对于口译员来说,这是第二种形式。 因此,它正在寻找与name相等的第一个表达式。当它读取第一个When时,它会检查名称是否等于参数(名称类似“%aa%”)
但是(像“%aa%”这样的名称)是一个布尔值,名称是一个字符串,因此会出现错误。

用您正在使用的数据库标记您的问题。样本数据和预期结果将有所帮助。第一段最后一句中“it”的先行词不清楚。嗨@AaronSpencerPhalin我看到你是SO的一员有一段时间了,从你的提问历史来看,这篇小文章可能有用:干杯!单引号用于指示SQL中字符串的开头和结尾。双引号通常不在SQL中使用,但在不同的数据库中可能会有所不同。坚持使用单引号。
UPDATE table
   SET name = CASE 
                      WHEN name like "%aa%" then "A" 
                      WHEN name like "%er%" then "E"
                      ELSE "Z"
                      END
 WHERE name is not null