ssis过滤出以字母

时间:2016-11-21 06:44:39

标签: sql sql-server excel ssis

在SSIS项目中,我尝试过滤掉Excel文件源中的行,其中列的值以字母开头,后跟数字。一些单元格包含多个值,而不是所有单元格都遵循数据类型格式。数据流程目前如下:
Excel Source > Data Conversion > OLE DB Destination
我在Excel Source之后添加了条件性拆分,但我对如何过滤掉不需要的记录感到困扰。以下是在数据流结束之前不应包含的值的示例:

Row      Value
1        1234
2        P123
3        P1234, P456
4        rec P678

第1行应该是唯一应该流向目的地的行。有没有办法过滤掉以“P”开头并后跟数字的记录,无论每个单元格中有多少个值?

更新:我目前正在研究FINDSTRING(价值,“P”,1)> 0 || FINDSTRING(值,“p”,1)> 0.输出阻止第2-4行,但第1行的值更改为0.有人知道为什么会这样吗?

2 个答案:

答案 0 :(得分:1)

第一解决方案

脚本组件,使用.Net方法检查值是否为数字。

1)脚本组件 添加脚本组件(类型:转换),您需要在其中进行检查。

2)选择输入列 添加需要作为输入列检查的列。

3)添加输出列 在“输入和输出”选项卡上的“输出”列中添加新列。类型拍摄是布尔值并给它一个合适的名称。

4)剧本

' VB.Net代码 '检查字符串值是否包含数字     进口系统     导入System.Data     进口System.Math     导入Microsoft.SqlServer.Dts.Pipeline.Wrapper     导入Microsoft.SqlServer.Dts.Runtime.Wrapper

Public Class ScriptMain
Inherits UserComponent

Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
    ' Standard VB.net method, indicating whether
    ' an expression can be evaluated as a number
    If (IsNumeric(Row.InputCol)) Then
        Row.IsNumeric = True
    Else
        Row.IsNumeric = False
    End If
End Sub

End Class

5)创建条件拆分以过滤行

第二解决方案

派生列

1)添加派生列 添加派生列,您需要在其中进行检查。

2)添加表达式 使用以下表达式添加新列,并为其指定合适的名称:!ISNULL((DT_I8)TextNumbers)。所有数字都将为True,所有非数字都会引发错误。

3)忽略错误 转到Derived列中的Configure Error Output窗口,忽略新字段的错误。

4)结果 使用ISNULL表达式

添加条件拆分以过滤行

第三解决方案

数据转换

1)使用数据转换 第二种解决方案的替代方法是尝试通过数据转换转换将值转换为int,并忽略任何错误。然后使用ISNULL表达式

添加条件拆分以过滤行

答案 1 :(得分:0)

您要检查的条件查看字段是否为数字。不幸的是,我们在SSIS中没有直接的ISNUMERIC功能。

请通过以下链接。我们可以使用派生列来实现这一目标。

Check IsNumeric() with Derived Column Transform in SSIS Package