求助:优化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;
逻辑说明
- 括号场景处理:通过反向字符串定位最后一个
(的位置,确保提取最右侧的完整括号对,避免被左侧无关括号干扰; - 无括号场景处理:当输入中不存在完整括号对时,直接截取第一个空格前的单词作为结果。
验证结果
替换@input为三个场景的输入后,执行结果完全符合期望:
- 输入input1 → 输出
(1 Month) - 输入input2 → 输出
(1 Month) - 输入input3 → 输出
Daily
内容的提问来源于stack exchange,提问作者Ajay
相关产品推荐
相关产品推荐

