需要 SSIS Expression 帮助在文件名中查找关键字

Need SSIS Expression help for find keyword in filename

我需要以下场景的帮助。

我有这样的文件名

abc_assessment_20200303121212.csv
fgcdv_assessment_20200303121212.csv
xycv_assessment_20200303121212.csv

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

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

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

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"

它仍然会产生错误,因为 xycv_assessment 显然与评估不同。

最后的想法

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

如果您需要找到 xycv 与 asessment 与日期字符串的片段,请继续这条路线,但找到第一个下划线的位置并将片段切出。

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