この関数は、現在、9つの位置を返しますが、拡張または削減することは容易です。
Declare @Sample table (FIELDNAME varchar(200))
Insert Into @Sample values
('ABC-123-XYZ'),
('Some-Text'),
('NoHyphen')
Select *
From @Sample A
Cross Apply [dbo].[udf-Str-Parse-Row](A.FIELDNAME+'-','-') B
戻り
FIELDNAME Pos1 Pos2 Pos3 Pos4 Pos5 Pos6 Pos7 Pos8 Pos9
ABC-123-XYZ ABC 123 XYZ NULL NULL NULL NULL NULL
Some-Text Some Text NULL NULL NULL NULL NULL NULL
NoHyphen NoHyphen NULL NULL NULL NULL NULL NULL NULL
か、単に文字列
Select * from [dbo].[udf-Str-Parse-Row]('ABC-123-XYZ'+'-','-')
とを処理する文字列に - '' 私たちが追加されている
お知らせ返品
Pos1 Pos2 Pos3 Pos4 Pos5 Pos6 Pos7 Pos8 Pos9
ABC 123 XYZ NULL NULL NULL NULL NULL NULL
UDF例えば
CREATE FUNCTION [dbo].[udf-Str-Parse-Row] (@String varchar(max),@Delimiter varchar(10))
Returns Table
As
Return (
Select Pos1 = xDim.value('/x[1]','varchar(max)')
,Pos2 = xDim.value('/x[2]','varchar(max)')
,Pos3 = xDim.value('/x[3]','varchar(max)')
,Pos4 = xDim.value('/x[4]','varchar(max)')
,Pos5 = xDim.value('/x[5]','varchar(max)')
,Pos6 = xDim.value('/x[6]','varchar(max)')
,Pos7 = xDim.value('/x[7]','varchar(max)')
,Pos8 = xDim.value('/x[8]','varchar(max)')
,Pos9 = xDim.value('/x[9]','varchar(max)')
From (Select Cast('<x>' + Replace(@String,@Delimiter,'</x><x>')+'</x>' as XML) as xDim) A
)
--Select * from [dbo].[udf-Str-Parse-Row]('Dog,Cat,House,Car',',')
--Select * from [dbo].[udf-Str-Parse-Row]('John Cappelletti',' ')
を必要に応じて:一部のデータは、ABC-123から321のようなもので、いくつかは、単にABCであり、いくつかは、ABC-123のようなものです。 – KCodeR