我正在使用 BIDS [SQL Server 2008r2] 从 csv 导入数据。我需要将 hh:mm:ss 转换为要导入 SQL Server 的数字。例如
00:01:05 = 65
当前步骤:
转换看起来像这样。
假设您正在谈论 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)))
这将为您的管道添加一个新列,其名称为您在“派生列名称”中提供的名称,该名称将具有正确的格式。
这也可以通过在时间戳中转换字符串数据类型来实现。然后在派生列表达式中使用以下表达式:
DatePart("Hh",[通话时间])*3600 + DatePart("mi",[通话时间])*60 + DatePart("ss",[通话时间])
上面的表达式将返回数字数据