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)结果使用ISNULL
expression式添加一个条件分割来过滤行
第三scheme
数据转换
1)与数据转换第二个解决scheme的替代方法可能是尝试通过数据转换转换为int值,也忽略任何错误。 使用ISNULL
expression式添加条件拆分来过滤行