【发布时间】:2017-06-05 12:48:59
【问题描述】:
我对 SQL 非常陌生(3 天前开始学习),所以我假设我的代码中有一些可怕的语法错误。
我从昨天开始一直在尝试创建一个更新查询,该查询使用案例根据以下条件修改value 列:
- 当
value包含字母“a”时,将值设为大写。 - 当
value包含字母“d”但不包含字母“a”时,将value设为小写。 - 当
value不满足上述条件时,将value的首尾字母改为1和2。
我尝试了很多不同的方法,但我总是以某种错误告终。此代码返回缺少关键字错误:
UPDATE t1
SET value =
CASE WHEN value LIKE '%a%' THEN SET value = UPPER(value)
WHEN value LIKE '%d%' AND value NOT LIKE '%a' THEN SET value = LOWER(value)
ELSE REPLACE(value,'_%','1') AND REPLACE(value,'%_','2')
END
Where value IS NOT NULL;
【问题讨论】:
-
值得注意的是,因为 case 表达式会使逻辑短路(即它在第一个满足的条件时停止处理),当您达到
when value like '%d%' ...条件时,您会自动知道字符串中不存在as(否则将满足 case 表达式中的第一个条件)。所以,你的第二个条件可能只是when value like '%d%' then lower(value)