我需要重命名变量 @FilePath 中包含的文件,但我面临的问题是扩展名,我无法弄清楚如何获取 csv 文件扩展名之前的日期。我该如何解决这个问题?
这是当前变量值的显示方式:
User::FilePath {C:\\SSIS\\Files\\Template.csv} String
User::FilePathRename {C:\\SSIS\\Files\\Template.csv_19_05_2019_14_39_07.csv} String
FilePath 具有以下表达式:
@[User::SourceFolder] + "\\" + @[User::FileName]
SourceFolder 是 ForEach 循环搜索并读取每个 .csv 文件的文件夹。
FilePathRename 具有以下表达式:
@[User::FilePath] + "_"
+ RIGHT("0" + (DT_STR, 2, 1252) DATEPART("dd" , @[User::FileDate]), 2)
+ "_"
+ RIGHT("0" + (DT_STR, 2, 1252) DATEPART("mm" , @[User::FileDate]), 2)
+ "_"
+ (DT_STR, 4, 1252) DATEPART("yyyy" , @[User::FileDate])
+ "_"
+ RIGHT("0" + (DT_STR, 2, 1252)DATEPART("hh", @[User::FileDate]), 2)
+ "_"
+ RIGHT("0" + (DT_STR, 2, 1252)DATEPART("mi", @[User::FileDate]), 2)
+ "_"
+ RIGHT("0" + (DT_STR, 2, 1252)DATEPART("ss", @[User::FileDate]), 2)
+ ".csv"
最佳答案
SSIS表达方式
您可以使用 TOKEN
和 TOKENCOUNT
来实现这一点,请尝试以下表达式:
@[User::SourceFolder] + "\\"
+ TOKEN(@[User::FileName], ".", 1)
+ "_"
+ RIGHT("0" + (DT_STR, 2, 1252) DATEPART("dd" , @[User::FileDate]), 2)
+ "_"
+ RIGHT("0" + (DT_STR, 2, 1252) DATEPART("mm" , @[User::FileDate]), 2)
+ "_"
+ (DT_STR, 4, 1252) DATEPART("yyyy" , @[User::FileDate])
+ "_"
+ RIGHT("0" + (DT_STR, 2, 1252)DATEPART("hh", @[User::FileDate]), 2)
+ "_"
+ RIGHT("0" + (DT_STR, 2, 1252)DATEPART("mi", @[User::FileDate]), 2)
+ "_"
+ RIGHT("0" + (DT_STR, 2, 1252)DATEPART("ss", @[User::FileDate]), 2)
+ ".csv"
脚本任务方法
但如果文件名包含点,此表达式可能不准确(例如:filename.1.xml
),我更喜欢使用脚本任务来实现以下代码行:
DateTime FileDate = (DateTime)Dts.Variables["User::FileDate"].Value;
string oldFile = Dts.Variables["User::FilePath"].Value.ToString();
string newFile;
newFile = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(oldFile),System.IO.Path.GetFileNameWithoutExtension(oldFile)) + "\\" + FileDate.ToString("_dd_MM_yyyy_HH_mm_ss") + ".csv";
Dts.Variables["User::FilePathRename"].Value = newFile;
引用文献
关于sql-server - SSIS重命名文件,文件扩展名出现在正确的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56204916/