SQL Server中如何拆分Test列字符串并在B段数据前插入换行符
SQL Server 字符串拆分重组实现方案
核心思路是通过内置字符串定位函数提取B:开头的目标分段,调整分段顺序后拼接换行符,不需要依赖自定义拆分函数,兼容SQL Server 2008及以上版本。
实现步骤
- 定位带前置空格的
B:字符串起始位置,避免误匹配内容文本中偶然出现的B:字符,切分出B段之前的内容 - 从
B:的位置往后查找下一个分段标识(示例中为C:)的位置,以此为边界切分出B段本身、B段之后的内容 - 按「B段前内容 + B段后内容 + 换行符 + B段」的顺序拼接,得到目标格式
代码示例
SELECT CONCAT( -- 提取B段之前的内容(A段) LEFT(Test, CHARINDEX(' B:', Test) - 1), ' ', -- 提取B段之后的内容(C段) SUBSTRING( Test, CHARINDEX(' C:', Test, CHARINDEX(' B:', Test)) + 1, LEN(Test) ), -- Windows风格换行符 CHAR(13) + CHAR(10), -- 提取完整B段内容 SUBSTRING( Test, CHARINDEX(' B:', Test) + 1, CHARINDEX(' C:', Test, CHARINDEX(' B:', Test)) - CHARINDEX(' B:', Test) - 1 ) ) AS test FROM 你的业务表名
如果使用SQL Server 2008版本不支持CONCAT函数,直接将CONCAT()替换为+做字符串拼接即可,可按需加ISNULL判断避免空值导致整个拼接结果为NULL。
效果说明
针对示例数据A:Hi B:13/06/2022 C:Peter,上述代码返回结果完全匹配需求:
A:Hi C:Peter
B:13/06/2022
注意在SSMS客户端查看结果时,需要切换为文本显示模式(快捷键Ctrl+T)才能看到换行效果,默认网格视图不会解析展示换行符。
如果你的实际数据分段标识不固定、B段位置不固定,只需要调整CHARINDEX的匹配规则,核心拆分拼接逻辑不需要改动。
内容的提问来源于stack exchange,提问作者VB.netDeveloper
相关产品推荐
相关产品推荐

