首页 > 解决方案 > sql 在一定长度的字符后拆分为新行

问题描述

我在其中一列中有记录,如下所示:

132007700013213860001321264000          

我想在不使用任何基于 char 长度 10 的分隔符的情况下进行拆分。每 10 个字符后,我需要在新行中记录。像下面

1320077000
1321386000
1321264000                                                                                                                                                                                                             

标签: sqlsql-serverssms

解决方案


如果字符串是固定宽度的,您可以使用 3 个 SUBSTRING 函数和 CROSS APPLY 将 3 列“取消旋转”为 1 列,称为“new_col”。

declare @txtTable   table(txt       char(30) not null)

insert @txtTable(txt) values 
('132007700013213860001321264000'),
('999999999999999999999999999999');

select u.*
from @txtTable t
    cross apply (values (substring(t.txt, 1, 10),
                         substring(t.txt, 11, 10),
                         substring(t.txt, 21, 10))) v(c1, c2, c3)
     cross apply (values (v.c1),(v.c2),(v.c3)) u(new_col);
new_col
1320077000
1321386000
1321264000
9999999999
9999999999
9999999999

推荐阅读