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::StartTime
比 GETDATE()
更好,尤其是在涉及时间的时候。每次检查时都会评估 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)
我正在尝试使用 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::StartTime
比 GETDATE()
更好,尤其是在涉及时间的时候。每次检查时都会评估 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)