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

如何用SUBSTRING和CHARINDEX提取文件名中的text4及text5文本块?

解决方案:提取文件名中的text4和text5文本块

你的文件名格式为ab123_text1_text2_text3_text4_text5_.xlsx,以下划线分隔为多个模块。原始代码仅通过两次嵌套CHARINDEX定位了第2、3个下划线之间的内容(即text3),要提取text4和text5需要调整嵌套层数,精准定位目标模块前后的下划线位置。

提取text4的SQL代码

SELECT 
    SUBSTRING(
        FILENAME,
        -- 定位第4个下划线的位置,加1作为截取起始点
        CHARINDEX('_', FILENAME, CHARINDEX('_', FILENAME, CHARINDEX('_', FILENAME, CHARINDEX('_', FILENAME) + 1) + 1) + 1) + 1,
        -- 计算截取长度:第5个下划线位置 - 第4个下划线位置 - 1
        CHARINDEX('_', FILENAME, CHARINDEX('_', FILENAME, CHARINDEX('_', FILENAME, CHARINDEX('_', FILENAME, CHARINDEX('_', FILENAME) + 1) + 1) + 1) + 1)
        - CHARINDEX('_', FILENAME, CHARINDEX('_', FILENAME, CHARINDEX('_', FILENAME, CHARINDEX('_', FILENAME) + 1) + 1) + 1)
        - 1
    ) AS text4
FROM mytable

提取text5的SQL代码

SELECT 
    SUBSTRING(
        FILENAME,
        -- 定位第5个下划线的位置,加1作为截取起始点
        CHARINDEX('_', FILENAME, CHARINDEX('_', FILENAME, CHARINDEX('_', FILENAME, CHARINDEX('_', FILENAME, CHARINDEX('_', FILENAME) + 1) + 1) + 1) + 1) + 1,
        -- 计算截取长度:第6个下划线位置 - 第5个下划线位置 - 1
        CHARINDEX('_', FILENAME, CHARINDEX('_', FILENAME, CHARINDEX('_', FILENAME, CHARINDEX('_', FILENAME, CHARINDEX('_', FILENAME, CHARINDEX('_', FILENAME) + 1) + 1) + 1) + 1) + 1)
        - CHARINDEX('_', FILENAME, CHARINDEX('_', FILENAME, CHARINDEX('_', FILENAME, CHARINDEX('_', FILENAME, CHARINDEX('_', FILENAME) + 1) + 1) + 1) + 1)
        - 1
    ) AS text5
FROM mytable

更易读的分步写法(推荐)

通过CTE分步计算每个下划线的位置,避免多层嵌套的可读性问题:

WITH FileNamePositions AS (
    SELECT 
        FILENAME,
        CHARINDEX('_', FILENAME) AS pos1, -- 第1个下划线位置
        CHARINDEX('_', FILENAME, pos1 + 1) AS pos2, -- 第2个下划线位置
        CHARINDEX('_', FILENAME, pos2 + 1) AS pos3, -- 第3个下划线位置
        CHARINDEX('_', FILENAME, pos3 + 1) AS pos4, -- 第4个下划线位置
        CHARINDEX('_', FILENAME, pos4 + 1) AS pos5, -- 第5个下划线位置
        CHARINDEX('_', FILENAME, pos5 + 1) AS pos6  -- 第6个下划线位置
    FROM mytable
)
SELECT 
    SUBSTRING(FILENAME, pos4 + 1, pos5 - pos4 - 1) AS text4,
    SUBSTRING(FILENAME, pos5 + 1, pos6 - pos5 - 1) AS text5
FROM FileNamePositions

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 08:18:11