gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 08:55:08 24 4
gpt4 key购买 nike

我正在尝试使用 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 是包本身开始的时间。它对于运行本身来说是恒定的,但显然每次运行都会重置。

关于sql-server - SSIS 表达式中带时间戳的前导零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28458910/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com