SQL特殊字符串比较:根据Client表Type列前缀生成对应新列
完美实现你的多条件分类需求
嘿,作为SQL新手能想到用SUBSTRING和IF来处理开头匹配,已经迈出很棒的一步啦!你当前的代码只覆盖了XXX开头的情况,要实现多个前缀的判断,有两种常用方案,都很适合新手上手:
方案1:嵌套IF语句(顺着你的现有思路扩展)
既然你已经在用IF,可以直接嵌套它来依次判断后续的条件,最后再加个ELSE处理所有其他情况(比如返回空或者OTHER,看你的需求):
SELECT name, IF(SUBSTRING(type, 1, 3) = 'XXX', 'CAT1', IF(SUBSTRING(type, 1, 3) = 'XXY', 'CAT2', IF(SUBSTRING(type, 1, 3) = 'XYY', 'CAT3', '') ) ) AS x2 FROM client;
小提示:这里的SUBSTRING(type,1,3)也可以换成更直观的LEFT(type,3),效果完全一样哦。
方案2:CASE WHEN语句(更易读,推荐长期使用)
当条件变多的时候,嵌套IF会越来越难读,CASE WHEN的结构更清晰,逻辑一目了然,非常适合多分支判断:
SELECT name, CASE WHEN LEFT(type, 3) = 'XXX' THEN 'CAT1' WHEN LEFT(type, 3) = 'XXY' THEN 'CAT2' WHEN LEFT(type, 3) = 'XYY' THEN 'CAT3' ELSE '' -- 这里可以换成'OTHER'或者其他你需要的默认值 END AS x2 FROM client;
这个写法的好处是,哪怕以后要加更多前缀分类,直接加新的WHEN行就行,维护起来特别方便。
如果你的数据库支持LIKE匹配(大部分主流数据库都支持),也可以用type LIKE 'XXX%'来代替截取字符串,写法会更简洁:
SELECT name, CASE WHEN type LIKE 'XXX%' THEN 'CAT1' WHEN type LIKE 'XXY%' THEN 'CAT2' WHEN type LIKE 'XYY%' THEN 'CAT3' ELSE '' END AS x2 FROM client;
这个方式不需要手动截取前3位,数据库会自动匹配以指定字符串开头的内容,更省心~
内容的提问来源于stack exchange,提问作者salsa
相关产品推荐
相关产品推荐

