在sql server中存储持续时间(timespans)

时间:2011-05-06 13:08:03

标签: sql-server database database-design

我必须在SQL Server 2008数据库中存储持续时间。这通常是怎么做的?

例如,我必须能够存储以下值:5分钟,8小时,10天等。

我正在考虑将它存储在smalldatetime字段中作为mindatetime + timespan。或者可以作为表示某个最小日期的偏移量的int。

任何人都有这方面的经验吗?

3 个答案:

答案 0 :(得分:18)

如果开始时间很长(例如,因为您录制了一个事件),那么您将始终希望将其存储为日期时间,以便稍后可以将其读回来,存储后续持续时间可以只是另一个“已结束”的日期时间。

如果它是一个任意的持续时间(电影长度等),我只需将它作为秒存储在整数中,然后在表示层中添加美化代码,将其显示为小时/天等。

答案 1 :(得分:2)

使用具有开始和结束时间的方法时要注意的一点是夏令时变化。您必须确保您使用的SQL Server数据类型支持时区信息。此外,您需要确保它支持历史DST更改信息。例如,2007年之前美国的夏令时变化规则与目前不同。

在我们的数据库中,我们只需要安全的方法和存储开始时间,结束时间和持续时间(以秒为单位)。

答案 2 :(得分:0)

我要做的是有两列,一列是最后一次触发事件,另一列是事件触发之间的时间。这样你就可以在最后一次触发和now()之间查询dateDiff,并查看该值是否大于火灾之间的持续时间。

至于持续时间的值,我会得到你需要的最小时间值。这样,如果你的最小值为5分钟,那么该列应该是几分钟。如果你有一个以秒为单位的最小值,那么它应该是以秒为单位。

相关问题