小时 h:mm:ss 时间格式中没有前导零,可在 SSIS 的派生列中转换为秒

问题描述 投票:0回答:1

源平面文件具有 :00:00 格式和 0:00:00 格式的持续时间列。当小时中没有前导零时尝试转换为秒。在记事本++中查看时的源文件示例 在此处输入图像描述](https://i.sstatic.net/62SvtuBM.png)

enter image description here

我已尝试使用派生列将以下内容转换为秒:

(DT_I4)(DT_STR,8,1254)LEN(时间) == 8 ? ((DT_I4)(DT_STR,8,1254)LEFT(时间,2) * 3600) + ((DT_I4)(DT_STR,8,1254)SUBSTRING(时间,4,2) * 60) + ((DT_I4)(DT_STR ,8,1254)RIGHT(时间,2)) : ((DT_I4)(DT_STR,8,1254)LEN(时间) == 6 ? ((DT_I4)(DT_STR,8,1254)SUBSTRING(时间,2,2 ) * 60) + ((DT_I4)(DT_STR,8,1254)右(时间,2)) : ((DT_I4)(DT_STR,8,1254)右(时间,2)))

但没有得到想要的结果,而是得到这个

enter image description here

结果应该是这样的:

时间 时间结果
1:00:00 3600
:30:00 1800
:53:14 3194
ssis datetime-conversion derived-column
1个回答
0
投票

我认为你的表达很好,除了你需要另一种长度为 7 的时间值的情况,比如 1:00:00。对于 :00:00 这样的值,您有 6 个,对于 10:00:00 这样的值,您有 8 个,但您需要一个对于 7 个长度值。

试试这个:

(DT_I4)(DT_STR,8,1254)LEN(TIME) == 8 ? ((DT_I4)(DT_STR,8,1254)LEFT(TIME,2) * 3600) + ((DT_I4)(DT_STR,8,1254)SUBSTRING(TIME,4,2) * 60) + ((DT_I4)(DT_STR,8,1254)RIGHT(TIME,2)) : (DT_I4)(DT_STR,8,1254)LEN(TIME) == 7 ? ((DT_I4)(DT_STR,8,1254)LEFT(TIME,1) * 3600) + ((DT_I4)(DT_STR,8,1254)SUBSTRING(TIME,3,2) * 60) + ((DT_I4)(DT_STR,8,1254)RIGHT(TIME,2)) : (DT_I4)(DT_STR,8,1254)LEN(TIME) == 6 ? ((DT_I4)(DT_STR,8,1254)SUBSTRING(TIME,2,2) * 60) + ((DT_I4)(DT_STR,8,1254)RIGHT(TIME,2)) : (DT_I4)(DT_STR,8,1254)RIGHT(TIME,2)
© www.soinside.com 2019 - 2024. All rights reserved.