1

我正在使用 BIDS [SQL Server 2008r2] 从 csv 导入数据。我需要将 hh:mm:ss 转换为要导入 SQL Server 的数字。例如

00:01:05 = 65

当前步骤:

在此处输入图像描述

转换看起来像这样。 数据转换

4

2 回答 2

2

假设您正在谈论 SQL Server Integration Services,您可以通过派生列转换来完成此操作。

派生列转换拖动到您的数据流管道中,并连接源。

在此处输入图像描述

打开它并添加一个新字段,为其命名并选择<add as new column>。将以下公式粘贴到表达式框中,将“SrcTime”替换为您的字段名称:此表达式会将时间字段转换为十进制分钟(例如,01:01:30 变为 61.5)

(DT_NUMERIC,6,2)(((DT_I4)LEFT(SrcTime,2) * 60) + 
((DT_I4)SUBSTRING(SrcTime,4,2)) + 
((DT_NUMERIC,4,2)RIGHT(SrcTime,2) / 60))

编辑:如果您需要几秒钟而不是几分钟(01:01:30 变为 3690.00),您可以将公式更改为:

(DT_NUMERIC,10,2)(((DT_I4)LEFT(SrcTime,2) * 3600) + 
((DT_I4)SUBSTRING(SrcTime,4,2) * 60 ) + 
((DT_NUMERIC,4,2)RIGHT(SrcTime,2)))

再次编辑:根据您的版本,该LEFT()功能在表达式编辑器中不可用。请改用此公式:

(DT_NUMERIC,10,2)(((DT_I4)SUBSTRING([TALK TIME],1,2) * 3600) + 
((DT_I4)SUBSTRING([TALK TIME],4,2) * 60) + 
((DT_NUMERIC,4,2)RIGHT([TALK TIME],2)))

在此处输入图像描述 这将为您的管道添加一个新列,其名称为您在“派生列名称”中提供的名称,该名称将具有正确的格式。

于 2014-10-16T19:04:06.120 回答
0

这也可以通过在时间戳中转换字符串数据类型来实现。然后在派生列表达式中使用以下表达式:

DatePart("Hh",[通话时间])*3600 + DatePart("mi",[通话时间])*60 + DatePart("ss",[通话时间])

上面的表达式将返回数字数据

于 2015-12-10T19:59:17.080 回答