热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SSIS表达式中带有日期戳的前导零

如何解决《SSIS表达式中带有日期戳的前导零》经验,为你挑选了1个好方法。

我正在尝试使用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中找到完成此功能的函数.

谁能帮助我如何用前导零格式化表达式?



1> billinkc..:

您遇到的问题是YEAR/MONTH/DAY函数返回一个整数.整数不会出现前导零.因此,"技巧"是将其转换为字符串.在该字符串前面加一个前导零.然后,使用该RIGHT函数剪掉最后2个字符.修剪仅在十月,十一月和十二月需要,但逻辑更清洁,无条件适用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是包本身开始的时间.它对于运行本身是恒定的,但显然每次运行都会重置.


推荐阅读
author-avatar
momo左
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有