sql-server之SSIS 表达式中带时间戳的前导零
yyy_WW
阅读:58
2024-08-05 10:48:10
评论:0
我正在尝试使用 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"
这会导致错误,因为数据类型
DT_DBTIMESTAMP
功能不支持
SUBSTRING
.我知道需要进行某种转换,但在 SSIS 中找不到完成此操作的函数。
任何人都可以帮助我如何使用前导零格式化表达式吗?
请您参考如下方法:
您遇到的问题是 YEAR/MONTH/DAY 函数返回一个整数。整数不会出现前导零。因此,“技巧”是将其转换为字符串。在该字符串前添加一个前导零。然后,使用 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。在长时间运行的包中,返回的值可能会有相当大的漂移。 System::StartTime 是包本身开始的时间。它对于运行本身来说是恒定的,但显然每次运行都会重置。
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。