这是我建议的一种方法:
首先,您需要一个拆分函数来将字符串转换为表格
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, '_')
生成一个表格:
第二件事...您可以使用pivot operator 将行转换为列
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 将产生以下结果:
从您的问题中不清楚您到底要做什么,但这是一个很好的起点。
希望对你有帮助~