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

如何在SQL中提取特定字符串(.svg)前的紧邻字符?

提取文本中每个.svg前指定片段的SQL方法

针对你提供的tempTable表,要提取每个.svg扩展名及其前面紧邻的指定片段,可通过递归CTE结合字符串函数实现,具体代码如下:

WITH SVGPositions AS (
    -- 获取每条记录中第一个.svg的位置
    SELECT 
        pkid,
        text AS original_text,
        CHARINDEX('.svg', text) AS svg_start_pos
    FROM tempTable
    WHERE CHARINDEX('.svg', text) > 0

    UNION ALL

    -- 递归查找后续所有.svg的位置
    SELECT 
        pkid,
        original_text,
        CHARINDEX('.svg', original_text, svg_start_pos + 4) AS svg_start_pos
    FROM SVGPositions
    WHERE CHARINDEX('.svg', original_text, svg_start_pos + 4) > 0
)
SELECT 
    SUBSTRING(
        original_text,
        -- 计算提取起始位置:找到.svg前最后一个空格,取空格前3位开始,不足则从文本开头取
        MAX(1, (svg_start_pos - 1 - CHARINDEX(' ', REVERSE(SUBSTRING(original_text, 1, svg_start_pos - 1)))) - 3),
        -- 计算提取长度:从起始位置到.svg结束的总长度
        (svg_start_pos + 3) - MAX(1, (svg_start_pos - 1 - CHARINDEX(' ', REVERSE(SUBSTRING(original_text, 1, svg_start_pos - 1)))) - 3) + 1
    ) AS result
FROM SVGPositions;

代码逻辑说明

  1. 递归CTE遍历所有.svg位置:
    • 初始步骤筛选出包含.svg的记录,获取第一个.svg的起始位置(即.的位置)。
    • 递归步骤不断从当前.svg位置之后查找下一个.svg,直到文本中无更多.svg为止,确保每个.svg都能被单独处理。
  2. 精准截取目标片段:
    • 通过REVERSE反转.svg前的文本,再用CHARINDEX找到反转后第一个空格的位置,以此定位原文本中.svg前最后一个空格的位置,从而关联到文件名前的单词。
    • 从该空格位置往前3位开始截取,到.svg的结束位置(.svg共4个字符,结束位置为svg_start_pos + 3),确保得到类似ike image1.svg的结果;若空格前不足3个字符,则从文本开头截取。

运行上述代码后,将得到你期望的3行结果,每个.svg对应一条目标片段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 06:15:39