如果条件不满足,派生列表达式SSIS如何忽略表达式?

Posted

技术标签:

【中文标题】如果条件不满足,派生列表达式SSIS如何忽略表达式?【英文标题】:Derived column expression SSIS how to ignore expression if condition is not met? 【发布时间】:2016-10-26 14:53:43 【问题描述】:

我目前有以下表达式,它根据连字符 (-) 拆分文本字符串,以便可以使用 SSIS/SSDT 中的派生列转换将其映射到不同的字段。 但是我注意到某些数据确实符合标准,例如。有些数据没有任何连字符或只有一个。

如果条件不满足,我可以在语句中添加什么以便忽略?

我目前的表达方式是:

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

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

谢谢

【问题讨论】:

例如:有些数据像 ABC-123-321,有些只是 ABC,有些像 ABC-123。 【参考方案1】:

这个函数目前返回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

OR 与一个字符串

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',' ')

【讨论】:

嗨约翰,有没有办法从派生列表达式而不是来自源的 sql 查询来做到这一点?

以上是关于如果条件不满足,派生列表达式SSIS如何忽略表达式?的主要内容,如果未能解决你的问题,请参考以下文章

无法解析我的 SSIS 派生列表达式

为啥派生列组件的表达式不适用于 SSIS 中的空值?

在SSIS派生列Expression中删除字符串的一部分

SSIS 表达式无法验证

SSIS派生列问题

在 SSIS 派生列中替换 NULL