作者:momo左 | 来源:互联网 | 2023-05-22 14:04
我正在尝试使用SSIS 2008 R2格式化日期戳,使其在表达式中具有前导零.
我想要的结果将是Exceptions - YYYYMMDDHHMMSS.xls
一个例子,现在将是:
1 | \\SomePath\Exceptions - 20150211155745.xls
|
我在将日期和月份的前导零添加时遇到问题.
我试过以下表达式尝试转换为DT_WSTR
长度设置以及选择日期分开usg SUBSTRING
:
1 | @[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
(注意月份缺少前导零).
1 | @[User::XLFileRootDir] + "Exceptions - " + (DT_WSTR, 4) SUBSTRING(GETDATE(), 1, 4) + ".xls"
|
这会导致错误,因为DT_DBTIMESTAMP
函数不支持数据类型SUBSTRING
.我知道需要进行某种转换,但无法在SSIS中找到完成此功能的函数.
谁能帮助我如何用前导零格式化表达式?
1> billinkc..:
您遇到的问题是YEAR/MONTH/DAY函数返回一个整数.整数不会出现前导零.因此,"技巧"是将其转换为字符串.在该字符串前面加一个前导零.然后,使用该RIGHT
函数剪掉最后2个字符.修剪仅在十月,十一月和十二月需要,但逻辑更清洁,无条件适用RIGHT
.
这将构建您的YYYYMMDD字符串.
1 2 3 | (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.在长时间运行的包中,返回的值可能会有相当大的偏差.System :: StartTime是包本身开始的时间.它对于运行本身是恒定的,但显然每次运行都会重置.