SSIS 表达式中带时间戳的前导零

Leading Zero with Datestamp in SSIS Expression

我正在尝试使用 SSIS 2008 R2 格式化日期戳以在表达式中包含前导零。

我想要的结果是 Exceptions - YYYYMMDDHHMMSS.xls 例如,现在是:

\SomePath\Exceptions - 20150211155745.xls

我在为日期和月份添加前导零时遇到问题。

我尝试了以下表达式,尝试将长度转换为 DT_WSTR 并选择分开的日期 usg SUBSTRING:

@[User::XLFileRootDir] + "Exceptions - " + (DT_WSTR, 4) DATEPART("YYYY", GETDATE()) + (DT_WSTR, 2) DATEPART("MM", GETDATE()) + (DT_WSTR, 2) DATEPART("DD", GETDATE())  + ".xls"

这导致 \SomePath\Exceptions - 2015211155745.xls(注意月份中缺少前导零)。

@[User::XLFileRootDir] + "Exceptions - " + (DT_WSTR, 4) SUBSTRING(GETDATE(), 1, 4) + ".xls"

这会导致错误,因为函数 SUBSTRING 不支持数据类型 DT_DBTIMESTAMP。我知道需要进行某种转换,但无法在 SSIS 中找到完成此转换的函数。

谁能帮我格式化带前导零的表达式?

您 运行 遇到的问题是 YEAR/MONTH/DAY 函数 return 是一个整数。整数不会出现前导零。所以,"trick"就是把它转换成字符串。在该字符串前加上一个前导零。然后,使用 RIGHT 函数剪掉最后 2 个字符。只需要在 10 月、11 月和 12 月进行修整,但无条件应用的逻辑更清晰 RIGHT

这将构建您的 YYYYMMDD 字符串。

(DT_WSTR, 4)YEAR(@[System::StartTime]) 
+ RIGHT("0" + (DT_WSTR, 2) MONTH(@[System::StartTime]), 2) 
+ RIGHT("0" + (DT_WSTR, 2) DAY(@[System::StartTime]), 2)

我发现使用变量 System::StartTimeGETDATE() 更好,尤其是在涉及时间的时候。每次检查时都会评估 GETDATE。在较长的 运行ning 包中,值 returned 可能会有相当大的漂移。 System::StartTime 是包本身开始的时间。它对于 运行 本身是不变的,但显然会重置 per 运行.

SUBSTRING((DT_WSTR, 29) GETDATE(), 6, 2)

对于我的应用程序,我需要准确的当前时间,我需要它精确到秒,结果如下:

(DT_WSTR, 4)DATEPART("yyyy",GETDATE()) 
+ RIGHT("0" + (DT_WSTR, 2) DATEPART("mm",GETDATE()),2) 
+ RIGHT("0" + (DT_WSTR, 2) DATEPART("dd",GETDATE()),2)
+ RIGHT("0" + (DT_WSTR, 2) DATEPART("Hh",GETDATE()),2)
+ RIGHT("0" + (DT_WSTR, 2) DATEPART("mi",GETDATE()),2)
+ RIGHT("0" + (DT_WSTR, 2) DATEPART("s",GETDATE()),2)