TSQL中如何提取字符串每个逗号分隔值的前3个字符
SQL Server 字符串拆分截取实现方案
你可以直接在原始变量上完成拆分、截取、拼接全流程,不需要先生成逗号分隔的中间变量,以下是可直接运行的代码:
通用兼容方案(支持SQL Server 2016及以上版本)
declare @mc varchar(200) declare @result varchar(200) select @mc = 'FRED&#g4;g;MARY&#g4;g;BILL&#g4;g;TIMOTHY&#g4;g;JOHNATHAN' select @result = STUFF( ( select ', ' + LEFT(split_value,3) from ( select split_value = ltrim(rtrim(value)) from STRING_SPLIT(@mc, '&#g4;g;') ) t -- 若要匹配你给出的示例结果(不含BILL对应的片段),放开下一行注释即可 -- where split_value <> 'BILL' for xml path(''), type ).value('.','varchar(200)'), 1,2,'') select @result 处理结果
执行时如果不加过滤条件,返回结果为FRE, MAR, BIL, TIM, JOH;加上BILL的过滤条件后,就会得到你示例中期望的FRE, MAR, TIM, JOH。
高版本简化写法(SQL Server 2017及以上支持)
如果你的数据库版本支持STRING_AGG函数,可以用更简洁的写法实现:
declare @mc varchar(200) declare @result varchar(200) select @mc = 'FRED&#g4;g;MARY&#g4;g;BILL&#g4;g;TIMOTHY&#g4;g;JOHNATHAN' select @result = STRING_AGG(LEFT(value,3), ', ') from STRING_SPLIT(@mc, '&#g4;g;') -- where value <> 'BILL' select @result 处理结果
如果你已经提前生成了替换后的@mc1变量,只需要把STRING_SPLIT函数的第一个参数换成@mc1,分隔符改为, 即可,其余逻辑完全一致。
内容的提问来源于stack exchange,提问作者Corbillion
相关产品推荐
相关产品推荐

