首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ssis筛选出值以字母开头的行

ssis筛选出值以字母开头的行
EN

Stack Overflow用户
提问于 2016-11-21 14:44:39
回答 2查看 6.4K关注 0票数 4

在一个SSIS项目中,我试图从Excel文件源中筛选出行,其中一列的值以字母开头,后面跟着数字。某些单元格包含多个值,并且并非所有单元格都遵循数据类型格式。数据流目前如下所示:

Excel Source > Data Conversion > OLE DB Destination

我在Excel源之后添加了一个条件拆分,但我为如何过滤掉不需要的记录而困扰。以下是在数据流结束之前不应包含的值的示例:

代码语言:javascript
复制
Row      Value
1        1234
2        P123
3        P1234, P456
4        rec P678

第1行应该是唯一应该流向目的地的行。有没有一种方法可以过滤出以“P”开头并以数字开头的记录,而不管每个单元格中有多少值?

更新:我目前正在处理FINDSTRING(Value,"P",1) > 0 || FINDSTRING(Value,"p",1) >0。输出阻止了第2-4行,但第1行的值已更改为0。有人知道为什么会这样吗?

EN

回答 2

Stack Overflow用户

发布于 2016-11-26 17:15:30

第一个解决方案

带有.Net方法的脚本组件,用于检查值是否为数字。

1)脚本组件在需要检查的地方添加一个脚本组件(类型:转换)。

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

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

4)脚本

‘VB.Net code’检查字符串值是否包含数字导入系统导入System.Data导入System.Math导入Microsoft.SqlServer.Dts.Pipeline.Wrapper导入Microsoft.SqlServer.Dts.Runtime.Wrapper

代码语言:javascript
复制
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)忽略错误转到派生列中的配置错误输出窗口,并忽略新字段的错误。

4)结果添加一个条件拆分,以使用ISNULL表达式过滤行

第三种解决方案

数据转换

1)对于数据转换,第二种解决方案的替代方案可能是尝试通过数据转换转换将值转换为int,并忽略任何错误。然后添加条件拆分以使用ISNULL表达式筛选行

票数 2
EN

Stack Overflow用户

发布于 2016-11-21 15:28:17

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

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

Check IsNumeric() with Derived Column Transform in SSIS Package

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40714258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档