ssis过滤出以字母开头的值

在一个SSIS项目中,我试图从一个Excel文件源中过滤出一列,其中列的值是以字母开头,后面跟着数字。 一些单元格包含更多的一个值,并不是所有单元格都遵循数据types格式。 数据stream目前如下:
Excel Source > Data Conversion > OLE DB Destination
我在Excel Source之后添加了条件拆分,但是我很担心如何过滤掉不需要的logging。 以下是在数据stream结束之前不应包含的值的示例:

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

第1行应该是唯一应该stream向目的地的。 有没有办法过滤出以'P'开头,后面跟着数字的logging,而不pipe每个单元格中有多less个值?

更新:我目前正在解决FINDSTRING(值,“P”,1)> 0 || FINDSTRING(Value,“p”,1)> 0.输出阻塞了第2-4行,但第1行的值更改为0.有人知道为什么会发生这种情况吗?

你想检查的条件看起来是否字段是数字或不。 不幸的是,我们在SSIS中没有简单的ISNUMERIC函数。

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

使用SSIS包中的派生列转换检查IsNumeric()

第一个scheme

脚本组件与.Net方法来检查值是否是一个数字。

1)脚本组件添加一个脚本组件(types:转换),你需要做检查。

2)selectinput列将需要检查的列添加为input列。

3)添加输出列在input和输出选项卡的输出列中添加一个新列。 types拍摄布尔,并给它一个合适的名字。

4)脚本

'VB.Net代码'检查string值是否包含数字Imports System Imports System.Data Imports System.Math Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper Imports 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)创build一个条件分割来过滤行

第二解决scheme

派生列

1)添加派生列添加一个派生列,你需要做检查。

2)添加expression式用下面的expression式添加一个新的列,给它一个合适的名字: !ISNULL((DT_I8)TextNumbers) 。 所有的数字都会导致True,所有的非数字都会产生一个错误。

3)忽略错误转到“派生”列中的“configuration错误输出”窗口,并忽略新字段的错误。

4)结果使用ISNULLexpression式添加一个条件分割来过滤行

第三scheme

数据转换

1)与数据转换第二个解决scheme的替代方法可能是尝试通过数据转换转换为int值,也忽略任何错误。 使用ISNULLexpression式添加条件拆分来过滤行