You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 13:12:37