ssis - SSIS在移动时将日期添加到文件名
问题描述
我在一个文件位置有一个 csv,我试图将它移动并重命名到另一个位置。
目前我有一个带有文件系统任务的 for 循环。
For 循环在以下位置查找所有 csv 文件@ProcessingFilePath
我将名称和扩展名写入一个名为@ProcessedFileName
.
我还有另一个名为 的变量@ArchiveFilePath
,这是我要移动文件的地方。
所以我有一个文件连接管理器,其表达式为
@ProcessingFilePath + "\\" + @ProcessedFileName
然后在文件系统任务中——源连接将是上面的文件连接管理器。
我正在尝试创建另一个变量的目的地,类似于@ArchiveFilePathandName
,我有以下表达式(我从另一个站点捏造)。
@[User::ArchiveFilePath]
+ SUBSTRING( @[User::ProcessedFileName] , 1 , FINDSTRING( @[User::ProcessedFileName],".",1) - 1 )
+ "-" + (DT_STR, 2, 1252) Month( @[System::StartTime] )
+ (DT_STR, 4, 1252) Year( @[System::StartTime] )
+ SUBSTRING( @[User::ProcessedFileName] , FINDSTRING( @[User::ProcessedFileName],".",1) , LEN( @[User::ProcessedFileName] ) )
但我收到一条错误消息:
长度 -1 对函数 SUBSTRING 无效。长度参数不能为负数。将长度参数更改为零或正值。
我不知道在这里做什么。有没有更好的方法来解决这个问题?
解决方案
问题是您的文件名称中没有点。该FINDSTRING
函数返回-1,随后SUBSTRING
失败,因为它不能从-1开始。
一个解决方案是预先检查文件是否有一个点以完全防止SUBSTRING
。您可以使用三元运算符来做到这一点? :
。
FINDSTRING(@[User::ProcessedFileName],".",1) > 0 ?
@[User::ArchiveFilePath]
+ SUBSTRING( @[User::ProcessedFileName] , 1 , FINDSTRING( @[User::ProcessedFileName],".",1) - 1 )
+ "-" + (DT_STR, 2, 1252) Month( @[System::StartTime] ) + (DT_STR, 4, 1252) Year( @[System::StartTime] )
+ SUBSTRING( @[User::ProcessedFileName] , FINDSTRING( @[User::ProcessedFileName],".",1) , LEN( @[User::ProcessedFileName] ) )
:
@[User::ArchiveFilePath]
+ @[User::ProcessedFileName]
+ "-" + (DT_STR, 2, 1252) Month( @[System::StartTime] ) + (DT_STR, 4, 1252) Year( @[System::StartTime] )
表达式确实是 SSIS 的一个弱点,这是一个很好的例子。
推荐阅读
- python - 如何使用python删除单词中的空格?
- reactjs - 如何为 React 道具定义 TypeScript 类型,其中仅当道具 A 传递给组件时才接受道具 B?
- javascript - 从Vue js通过axios调用谷歌地图海拔api时如何修复跨域读取阻塞?
- excel - 如何理解没有类型声明的“Dim a, b”?
- excel - 将查询从 Access 导入 PowerQuery
- python-3.x - 如何检查 pandas.core.series.Series 中 index.values 的位置
- python - Python 2.7:使用正则表达式匹配表达式
- javascript - 是否可以在不使用 .arc() 或任何其他 HTML 标签的情况下制作圆圈?
- c# - 我试图将我在 C# 中的加密转换为 PHP
- opencv - 在 Canny 边缘检测后查找个人 ID 轮廓 - OpenCV 4.0 + Python