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

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

实现逻辑

  1. 精准拆分:原文本中每个条目以两个空格分隔,通过STRING_SPLIT(COl1, ' ')将整段内容拆分为带序号的单个条目(如1) Elevated BMI)。
  2. 提取有效内容:对每个拆分后的条目,用CHARINDEX(')', item)定位)的位置,截取该位置之后的文本,再用TRIM()去除首尾空格,得到纯净的问题描述。
  3. 过滤无效项:通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 04:15:12