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

SQL实现多规则拆分字符串字段的方案问询

字符串拆分需求实现方案

完全可以用CASE WHEN结合字符串判断函数实现需求,以下以SQL Server语法为例(如果你使用其他数据库,仅需替换对应字符串函数即可):

实现逻辑说明

  • 优先判断字段是否包含下划线,包含则直接按下划线拆分,注意拆分时要去掉下划线本身
  • 不包含下划线的场景:
    • 先匹配4FH/GWO/CTW三个前缀,匹配成功则取前3位为第一列,剩余内容为第二列
    • 不匹配上述前缀但以4开头的,取第1位为第一列,剩余内容为第二列

可直接运行的SQL语句

SELECT
    lr.Source AS OriginalSource,
    -- 拆分后的第一列Source
    CASE
        WHEN CHARINDEX('_', lr.Source) > 0 THEN LEFT(lr.Source, CHARINDEX('_', lr.Source) - 1)
        WHEN LEFT(lr.Source, 3) IN ('4FH', 'GWO', 'CTW') THEN LEFT(lr.Source, 3)
        WHEN LEFT(lr.Source, 1) = '4' THEN LEFT(lr.Source, 1)
        -- 不满足上述规则的字符串可在这里补充ELSE兜底逻辑
        ELSE lr.Source
    END AS Source,
    -- 拆分后的第二列Instance
    CASE
        WHEN CHARINDEX('_', lr.Source) > 0 THEN RIGHT(lr.Source, LEN(lr.Source) - CHARINDEX('_', lr.Source))
        WHEN LEFT(lr.Source, 3) IN ('4FH', 'GWO', 'CTW') THEN RIGHT(lr.Source, LEN(lr.Source) - 3)
        WHEN LEFT(lr.Source, 1) = '4' THEN RIGHT(lr.Source, LEN(lr.Source) - 1)
        ELSE ''
    END AS Instance
FROM 你的表名 lr

其他数据库适配说明

如果你使用MySQL,仅需替换对应函数即可:

  • CHARINDEX('_', 字段) 替换为 LOCATE('_', 字段)
  • LEN(字段) 替换为 CHAR_LENGTH(字段)

补充说明

你提供的示例中ETK_ETK-40输出Instance为40,如果是需要对下划线拆分后的内容做二次截取,可在对应CASE分支中额外增加截取逻辑即可。

内容的提问来源于stack exchange,提问作者Clumsywolfy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 16:36:02