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

标签 sql-server csv 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

最佳答案

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),我更喜欢使用脚本任务来实现以下代码行:

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/

相关文章:

sql - 将行插入到列没有重复值的临时表中

c# - SSIS - CLR Sproc 的 OleDBCommand 问题

python - 将 RDD 写入带有拆分列的 csv

c# - 如何找到由下划线限定的 5 个数字组成的变量集?

sql-server - SSIS - 如何使用结果集作为 SQL 任务的输入并获得正确的数据类型?

sql-server - 死锁的历史

sql-server - T-SQL自动增量标识?

python - 在第一个空行写入 CSV

python - 想要将Salesforce报表内容导入、提取到pandas中,然后保存

ssis - 是否可以在 SSIS 中导出/导入 Project.params?