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

求助:优化SQL字符串提取查询以适配多输入场景

优化SQL查询以适配多场景字符串提取

现有SQL查询仅能处理单一格式的字符串提取需求,需优化以适配以下三种输入场景,精准获取目标内容:

原始查询代码

DECLARE @input2 VARCHAR(100) = '(USD) Term Loan SOFR (1 Month) 5.25%';
DECLARE @output2 VARCHAR(100);

SET @output2 = SUBSTRING(@input2, CHARINDEX('(', @input2), CHARINDEX(')', @input2) - CHARINDEX('(', @input2) + 1);

SELECT @output2 AS ParsedOutput;

输入输出要求

  • 场景1(input1)
    输入:

    (USD) Term Loan SOFR (1 Month) 5.25%
    

    期望输出:(1 Month)

  • 场景2(input2)
    输入:

    SOFR (1 Month) 3%
    

    期望输出:(1 Month)

  • 场景3(input3)
    输入:

    Daily SOFR 1.5%
    

    期望输出:Daily

优化后的查询代码

DECLARE @input VARCHAR(100) = '(USD) Term Loan SOFR (1 Month) 5.25%'; -- 可替换为任意场景输入
DECLARE @output VARCHAR(100);

SET @output = CASE
    -- 处理存在完整括号对的场景,提取最右侧的括号内容
    WHEN CHARINDEX(')', @input) > CHARINDEX('(', @input) THEN
        SUBSTRING(
            @input,
            LEN(@input) - CHARINDEX('(', REVERSE(@input)) + 1,
            CHARINDEX(')', @input, LEN(@input) - CHARINDEX('(', REVERSE(@input)) + 1) 
            - (LEN(@input) - CHARINDEX('(', REVERSE(@input)) + 1) + 1
        )
    -- 无括号时,提取第一个空格前的内容
    ELSE
        LEFT(@input, CHARINDEX(' ', @input) - 1)
END;

SELECT @output AS ParsedOutput;

逻辑说明

  1. 括号场景处理:通过反向字符串定位最后一个(的位置,确保提取最右侧的完整括号对,避免被左侧无关括号干扰;
  2. 无括号场景处理:当输入中不存在完整括号对时,直接截取第一个空格前的单词作为结果。

验证结果

替换@input为三个场景的输入后,执行结果完全符合期望:

  • 输入input1 → 输出(1 Month)
  • 输入input2 → 输出(1 Month)
  • 输入input3 → 输出Daily

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 22:05:15