【问题标题】:SSIS Renaming a file with file extension appearing in the correct placeSSIS重命名文件扩展名出现在正确位置的文件
【发布时间】:2019-05-19 05:07:44
【问题描述】:

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

【问题讨论】:

    标签: sql-server csv ssis etl


    【解决方案1】:

    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;
    

    参考文献

    【讨论】:

    • 谢谢@Hadi,很好的回答:)
    猜你喜欢
    • 2016-02-25
    • 2021-01-14
    • 2012-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-11
    • 2018-08-06
    相关资源
    最近更新 更多