SQL中按条件替换指定列字段值的正确查询写法
问题场景
当前使用的示例数据表tbl数据如下:
ID fruit first apl second org third bnna
需求为提取fruit列中值为apl、bnna的记录,分别将两个值替换为apple和banana,期望输出结果如下:
ID fruit first apple third banana
原写法错误说明
你之前编写的SQL存在两处核心问题:
- 列别名语法顺序错误:
AS关键字的标准用法是计算表达式 AS 列别名,原语句把替换函数写在了AS后方,属于语法错误 - 重复选取了两次fruit字段,即使修正语法,也会返回两列独立的替换结果,不符合单fruit列的输出要求
原错误SQL参考:
select ID, fruit as replace(fruit, "apl", "apple"), fruit as replace(fruit, "bnna", "banana") from tbl where fruit = 'apl' or fruit = 'bnna'
正确实现方案
写法1:CASE WHEN条件匹配(全数据库兼容,推荐使用)
通过条件分支精准匹配字段值做替换,逻辑清晰无歧义,后续新增替换规则也方便维护:
SELECT ID, CASE fruit WHEN 'apl' THEN 'apple' WHEN 'bnna' THEN 'banana' END AS fruit FROM tbl WHERE fruit IN ('apl', 'bnna');
写法2:嵌套REPLACE函数(适配当前筛选场景,写法简洁)
由于WHERE条件已经过滤出仅包含apl、bnna的记录,嵌套替换函数不会出现误替换问题,写法更简短:
SELECT ID, REPLACE(REPLACE(fruit, 'apl', 'apple'), 'bnna', 'banana') AS fruit FROM tbl WHERE fruit IN ('apl', 'bnna');
两种写法执行后返回结果均与预期完全一致。
内容的提问来源于stack exchange,提问作者Shahin
相关产品推荐
相关产品推荐

