2016-10-26 24 views
2

SSIS/SSDTで派生列変換を使用して異なるフィールドにマップできるように、ハイフン( - )に基づいてテキストの文字列を分割する以下の式があります。 しかし、私はいくつかのデータが基準を満たしていることに気付いています。一部のデータにハイフンや1つしかないデータがあります。派生列式SSIS条件が満たされない場合に式を無視する方法は?

条件が満たされない場合、無視するために文に追加することはできますか?

私の現在の表現は以下のとおりです。

SUBSTRING(FIELDNAME, 
FINDSTRING(FIELDNAME,"-",1) + 1, 
(FINDSTRING(FIELDNAME,"-",2) - FINDSTRING(FIELDNAME,"-",1)) - 1) 

SUBSTRING(FIELDNAME,1,FINDSTRING(FIELDNAME,"-",1) - 1) 

おかげ

+0

を必要に応じて:一部のデータは、ABC-123から321のようなもので、いくつかは、単にABCであり、いくつかは、ABC-123のようなものです。 – KCodeR

答えて

0

この関数は、現在、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',' ') 
+0

こんにちはJohn、ソースからのsqlクエリではなく、派生したカラム式から行う方法はありませんか? – KCodeR

関連する問題