我使用BIDS [SQL Server 2008r2]从csv导入数据。我需要将hh:mm:ss转换为数字以导入SQL Server。例如
00:01:05 = 65
当前步骤:
转化看起来像这样。
答案 0 :(得分:2)
假设您正在讨论SQL Server Integration Services,您可以通过派生列转换来实现此目的。
将Derived Column Transformation拖到数据流管道中,然后连接源。
打开它并添加一个新字段,为其命名并选择<add as new column>
。将以下公式粘贴到表达式框中,替换&#39; SrcTime&#39;使用您的字段名称:此表达式将时间字段转换为小数分钟(例如,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)))
这将为您的管道添加一个新列,其中包含您在“派生列名称”中提供的名称,其格式正确。
答案 1 :(得分:0)
这也可以通过在时间戳中转换字符串数据类型来实现。然后在派生列表达式中使用以下表达式:
DatePart(&#34; Hh&#34;,[Talk Time])* 3600 + DatePart(&#34; mi&#34;,[Talk time])* 60 + DatePart(&#34; ss&#34 ;,[谈话时间])
上面的表达式将返回数字
中的数字数据