sql-server - 需要 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"
解决方案
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 大于零,则它在文件名中。
推荐阅读
- reactjs - 使用 PHP 时发布请求有效,但是当我将 Axios 与 React 一起使用时,它会失败并出现 500 内部错误,我该如何解决?
- angular - 更新 Reactive formArray 中的现有字段值
- domain-driven-design - 如何在领域驱动设计中使用多态实体进行领域建模?
- javascript - Vue js中路由离开前的表单提交
- python - 如何管理多个 Python 版本和路径 - MacOS
- arrays - powershell命令输出,但变量应该从excel表中选择
- vb.net - ADO.NET - 在 DataViewManager 中访问每个 DataView
- algorithm - 最小总产能削减
- linux - Linux:如何使用相同的中断由多个 CPU 并行处理
- reactjs - Reactjs:为什么img的src不能传给props?