首页 > 解决方案 > 需要 SSIS 表达式帮助以在文件名中查找关键字

问题描述

我需要以下情况的帮助。

我有这样的文件名

abc_assessment_20200303121212.csv
fgcdv_assessment_20200303121212.csv
xycv_assessment_20200303121212.csv

现在我需要在 SSIS 包中正确表达以识别包含“assessemnt”作为关键字的文件。

我使用了下面的表达式,但它没有用

substring( @[User::FileName],1, FINDSTRING( @[User::FileName],"_",2)-1)=="assessment"

标签: sql-serverssisetlderived-column

解决方案


SSIS 表达式语言中没有调试功能。因此,当您第一次没有正确编写复杂的表达式时,这表明您一步做得太多。

让我们分解你的表情。

查找字符串

在最里面的操作中,您正在使用 findstring 查找第二个下划线的位置

FINDSTRING( @[User::FileName] ,"_",2)

如果 FileName 是 xycv_assessment_20200303121212.csv,则将产生 16 的值。

我怎么知道的?我创建了一个名为 SecondUnderscore 的变量,它只是 Findstring 操作。

子串

在此基础上,我创建了一个名为 SubString 的第二个变量,它使用 SecondUnderscore 变量

substring( @[User::FileName],1, @[User::SecondUnderscore] -1)

我很清楚地看到我的价值是“xycv_assessment”

布尔检查

此操作将 SubString 的结果与我评估的哨兵值进行比较。

@[User::SubString] == "assessment"

它仍然产生 False 因为 xycv_assessment 显然与评估不同。

最后的想法

字符串比较区分大小写,因此请注意,Assessment 将与 AssessmentT 等不匹配。Lower() 表达式将有助于避免这种情况

如果您需要找到 xycv vs asessment vs date 字符串的片段,那么继续这条路线,但找到您的第一个下划线的位置并将片段切掉。

否则,以@Tyron78 为例,只需检查字符串评估是否存在。如果 findstring 大于零,则它在文件名中。


推荐阅读