0

什么数据类型可以存储大于 24 小时的 VB 时间跨度?以下不会保存为 SQL 时间跨度值。

Dim span As TimeSpan = New TimeSpan(1, 2, 0, 30, 0)

输出

1.02:00:30

我希望以后能够对此进行计算。

SqlDbType.Time 溢出。值“1.02:00:30”超出范围。必须介于 00:00:00.0000000 和 23:59:59.9999999 之间。

这个 Fiddler 示例显示了我所追求的结果,我想将结果存储在 SQL 数据库中。
http://sqlfiddle.com/#!3/c7b0d/53

4

1 回答 1

0

我最初建议使用 SQL Server 2008“datetimeoffset”数据类型,但这是错误的。

正如之前的评论正确指出的那样,SQL Server 中目前没有自然存储和处理时间跨度值的数据类型。

最简单的替代方法是将偏移存储为浮点值,整数部分表示天,小数部分表示天的部分。这将允许进行简单的计算。数学可以如下进行:

select 
    getdate(),                                          -- Current datetime
    CONVERT(date, getdate()),                           -- Current date
    CONVERT(datetime, CONVERT(date, getdate())) +1,     -- Add one day
    CONVERT(datetime, CONVERT(date, getdate())) +1.75   -- Add a day + 3/4 or 18 hours
    getdate() + .75,                                    -- Current Time + 18 hours.
    getdate() + (3/4)                                   -- Current Time + 18 hours.

注意:您只能使用 [datetime] 数据类型进行这种日期时间数学。因此需要将 [date] 数据类型转换回 [datetime]。

于 2015-06-27T02:15:12.090 回答