Вот подход, который я бы предложил:
Для начала вам понадобится функция split для преобразования строки в таблицу
go
create function [dbo].[Split]
(
@String nvarchar(4000),
@Delimiter nchar(1)
)
returns table
as
return
(
with Split(stpos, endpos)
as(
select 0 as stpos, charindex(@Delimiter,@String) AS endpos
union all
select endpos+1, charindex(@Delimiter,@String,endpos+1)
from Split
where endpos > 0
)
select 'Id' = row_number() over (order by (select 1)),
'Data' = substring(@String,stpos,coalesce(nullif(endpos,0),len(@String)+1)-stpos)
from Split
)
Так что теперь вы можете сделать это:
go
declare @inputString nvarchar(128) set @inputString = '1_US_01_103_157_G014'
select * from dbo.Split(@inputString, '_')
, который производит таблицу:
Второе ... Вы можете использовать оператор поворота для преобразования строки в столбцы
go
declare @inputString nvarchar(128) set @inputString = '1_US_01_103_157_G014'
SELECT 'values', [1], [2], [3], [4], [5], [6]
FROM
(select Id, Data from dbo.Split(@inputString, '_')) AS SourceTable
PIVOT
(
max(Data)
FOR Id IN ([1], [2], [3], [4], [5], [6])
) AS PivotTable;
А pivot
даст следующий результат:
Из вашего вопроса не совсем ясно, что именно вы пытаетесь сделать, но это хорошая отправная точка.
Надеюсь, это поможет 10