SQL Server中如何将带编号的字符串拆分为独立行?
拆分带序号的字符串为独立行
问题场景
现有临时表#T,结构及数据如下:
CREATE TABLE #T(COl1 VARCHAR(MAX)) INSERT INTO #T VALUES('1) Elevated BMI 2) Elevated cholesterol 3) Deficient vitamin D level 4) No structured exercise 5) Elevated alcohol intake with mild fatty liver infiltration. 6) Elevated CK, Ferritin and high-sensitive CRP 7) Suboptimal blood glucose') SELECT * FROM #T
期望将字符串中的每个健康问题拆分为独立行:
Elevated BMI Elevated cholesterol Deficient vitamin D level No structured exercise Elevated alcohol intake with mild fatty liver infiltration. Elevated CK, Ferritin and high-sensitive CRP Suboptimal blood glucose
当前使用STRING_SPLIT按)拆分的结果不符合预期,输出包含多余的序号和空格。
解决方案
使用以下查询语句即可实现目标输出:
SELECT TRIM(SUBSTRING(item, CHARINDEX(')', item) + 1, LEN(item))) AS HealthIssue FROM #T CROSS APPLY STRING_SPLIT(COl1, ' ') WHERE CHARINDEX(')', item) > 0
实现逻辑
- 精准拆分:原文本中每个条目以两个空格分隔,通过
STRING_SPLIT(COl1, ' ')将整段内容拆分为带序号的单个条目(如1) Elevated BMI)。 - 提取有效内容:对每个拆分后的条目,用
CHARINDEX(')', item)定位)的位置,截取该位置之后的文本,再用TRIM()去除首尾空格,得到纯净的问题描述。 - 过滤无效项:通过
WHERE CHARINDEX(')', item) > 0确保只保留带序号的有效条目,避免拆分出无关内容。
输出结果
执行后将得到符合要求的独立行:
Elevated BMI Elevated cholesterol Deficient vitamin D level No structured exercise Elevated alcohol intake with mild fatty liver infiltration. Elevated CK, Ferritin and high-sensitive CRP Suboptimal blood glucose
内容的提问来源于stack exchange,提问作者WhoamI
相关产品推荐
相关产品推荐

