SSIS重命名文件扩展名出现在正确位置的文件

时间:2019-05-19 05:07:44

标签: sql-server ssis etl

我需要重命名变量@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"

enter image description here

1 个答案:

答案 0 :(得分:3)

SSIS表达方法

您可以使用TOKENTOKENCOUNT来实现,请尝试以下表达式:

@[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,则此表达式可能不准确,我更喜欢使用脚本任务通过以下代码行实现该目的:< / p>

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;

参考