【发布时间】:2016-11-21 06:44:38
【问题描述】:
在一个 SSIS 项目中,我试图从 Excel 文件源中过滤掉行,其中列的值以字母开头,后跟数字。某些单元格包含多个值,并且并非所有单元格都遵循数据类型格式。目前数据流如下:Excel Source > Data Conversion > OLE DB Destination
我在 Excel 源之后添加了条件拆分,但我对如何过滤掉不需要的记录感到困扰。以下是在数据流结束之前不应包含的值示例:
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。有人知道为什么会这样吗?
【问题讨论】:
-
只需按照示例执行您的要求simple-talk.com/sql/ssis/…
-
嗨!感谢您的回复,但我正在为我的 Conditional Split 寻找更具体的编码建议。基本上,拆分应该“阻止”其他行,因为它们包含以 P 作为第一个字符的记录,但后面是数字。这意味着如果值为“Person Value 1234”,则不应阻止该记录,因为“P”后面没有数字。我当前的代码(还不行)是: FINDSTRING(Value,"P",1) > 0 && CODEPOINT(SUBSTRING([Value],FINDSTRING(Value,"P",1),3)) > 47 && CODEPOINT(SUBSTRING(Value,FINDSTRING(Value,"P",1),7))
-
我猜您的第一行更改为零可能与 Excel 驱动程序猜测数据类型的 可怕 方法有关。它猜测数据类型错误,您对此无能为力。在这个链接msdn.microsoft.com/en-us/library/ms141683.aspx 阅读标题为缺失值的部分。这个问题在网上到处都是。我不知道为什么你的值是零而不是 NULL 但我很确定就是这样。查找 IMEX 的解决方法
-
零是 FINDSTRING() 找不到东西时的预期回报。 FINDSTRING() 计算字符串的出现次数。整数是它的回报。当它没有找到某些东西时,预计会出现零次。
标签: sql sql-server excel ssis