Если вы знаете, что у вас есть 6 столбцов в строке, вы можете использовать функции разбиения, которые выглядят следующим образом, и, конечно, изменить функцию на любое количество столбцов, которое вы хотите.Функция не может вернуть динамическое количество столбцов.
create function dbo.Split6(@String varchar(max), @Delimiter char(1))
returns table as return
(
select
substring(T.Col, 1, S1.Pos-1) as Col1,
substring(T.Col, S1.Pos+1, S2.Pos-S1.Pos-1) as Col2,
substring(T.Col, S2.Pos+1, S3.Pos-S2.Pos-1) as Col3,
substring(T.Col, S3.Pos+1, S4.Pos-S3.Pos-1) as Col4,
substring(T.Col, S4.Pos+1, S5.Pos-S4.Pos-1) as Col5,
substring(T.Col, S5.Pos+1, S6.Pos-S5.Pos-1) as Col6
from (select @String+replicate(@Delimiter, 6)) as T(Col)
cross apply (select charindex(@Delimiter, T.Col, 1)) as S1(Pos)
cross apply (select charindex(@Delimiter, T.Col, S1.Pos+1)) as S2(Pos)
cross apply (select charindex(@Delimiter, T.Col, S2.Pos+1)) as S3(Pos)
cross apply (select charindex(@Delimiter, T.Col, S3.Pos+1)) as S4(Pos)
cross apply (select charindex(@Delimiter, T.Col, S4.Pos+1)) as S5(Pos)
cross apply (select charindex(@Delimiter, T.Col, S5.Pos+1)) as S6(Pos)
)
Тест:
declare @T table (Col varchar(100))
insert into @T values
('Name Account 445566 0010020056893010445478008 AFD 369'),
(''),
('1 2'),
('1 3')
select S.Col1, S.Col2, S.Col3, S.Col4, S.Col5, S.Col6
from @T as T
cross apply
dbo.Split6(T.Col, ' ') as S
Результат:
Col1 Col2 Col3 Col4 Col5 Col6
---- ------- ------ ------------------------- ---- ----
Name Account 445566 0010020056893010445478008 AFD 369
1 2
1 3