在SQL数据库中保存VB时间跨度值

时间:2013-03-06 16:42:34

标签: sql-server vb.net timespan

我可以存储大于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

1 个答案:

答案 0 :(得分: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]。