【发布时间】:2022-01-22 01:59:11
【问题描述】:
我正在尝试创建一个 SSIS 派生列,它将 HH:MM:SS 从平面文件转换为数据库中的几秒钟。
我遇到但似乎不知道如何上网的问题是当 HH 超过 24 岁时。
例如,其中一个 csv 文件具有 178:29:00。
我在 24 小时以下时使用 (DT_NUMERIC,10,2)(((DT_I4)SUBSTRING([SPEED OF ANSWER],1,2) * 3600) + ((DT_I4)SUBSTRING([SPEED OF ANSWER],4,2) * 60) + ((DT_NUMERIC,4,2)RIGHT([SPEED OF ANSWER],2)))。
但是如果超过 24 岁就不行了。
【问题讨论】:
-
如果我没记错的话,Excel 实际上没有“时间”字段,只有日期和时间。时间值但在
24:00:00之后的值实际上只是1900-01-00之后的日期。所以01:00是1900-01-00 00:01:00但25:00和178:29分别是1900-01-01 01:00和1900-01-07 10:29。因此,您最好先将该值作为日期导入。 -
哦,它是一个CSV文件,然后将它作为文本导入。然后你可以把小时/分钟/秒分成几个部分,这很简单。
-
我认为你没有理解这个问题。
-
@SBA
178:29:00是持续时间,而不是时间。 SQL Server 没有持续时间类型。time类型用于保存一天中的时间,不能接受高于 24:00 的值。您必须将此类型作为其他内容导入,但首先您必须决定如何存储它。您不能使用time或datetime2。在 C# 中,您可以使用TimeSpan,但在 SQL Server 中没有等效项 -
如果您真的想节省几秒钟,您可以添加一个脚本转换,将文本解析为 TimeSpan 然后返回
TimeSpan.TotalSeconds。这避免了容易出错的字符串操作,并且可以轻松处理小于 1 小时的值
标签: sql-server ssis ssis-2012