如何在SQL中将字符串拆分后将州和城市结果显示在同一行?
解决方案:将拆分结果转为同一行的不同列
针对你的需求,这里提供两种可行的SQL实现方式:
方法1:直接字符串截取(适合固定格式场景)
由于你的字符串有固定结构C[州名]_d[城市名],可以直接通过定位下划线位置来截取目标内容,执行效率更高:
DECLARE @str varchar(30) SET @str = 'CMaharashtra_dPune' DECLARE @underscorePos int = CHARINDEX('_', @str) SELECT SUBSTRING(@str, 2, @underscorePos - 2) AS State, SUBSTRING(@str, @underscorePos + 2, LEN(@str) - @underscorePos - 1) AS City
执行后会直接返回一行数据,State列显示Maharashtra,City列显示Pune。
方法2:STRING_SPLIT结合条件聚合(通用场景)
如果需要更通用的拆分转列逻辑,可通过给拆分后的行添加序号,再用条件聚合将行数据转为列:
DECLARE @str varchar(30) SET @str = 'CMaharashtra_dPune' WITH SplitData AS ( SELECT value, ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS RowNum FROM STRING_SPLIT(SUBSTRING(@str, 2, LEN(@str)), '_') ) SELECT MAX(CASE WHEN RowNum = 1 THEN value END) AS State, STUFF(MAX(CASE WHEN RowNum = 2 THEN value END), 1, 1, '') AS City FROM SplitData
这种方法适合后续字符串结构有调整但仍保持“下划线分隔两个值”的场景,只需调整STUFF函数的参数即可适配不同前缀。
内容的提问来源于stack exchange,提问作者darshan Kapadia
相关产品推荐
相关产品推荐

