2011-05-06 54 views
19

我必须在SQL Server 2008数据库中存储持续时间。这通常如何完成?在SQL Server中存储持续时间(时间跨度)

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

我想将其存储在一个SMALLDATETIME字段作为mindatetime +时间跨度。或者可以作为一个int来表示某个最小日期的偏移量。

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

+0

可能的重复[什么是在SQL服务器数据库中存储时间间隔的最佳方式](http://stackoverflow.com/questions/2397547/what-is-the-best-way-to-store-time -interval-IN-A-SQL服务器数据库) – Pekka 2013-12-02 07:44:13

回答

18

如果开始时间很重要(例如,因为您记录了一个事件),那么您将始终希望将其存储为日期时间,以便稍后可以读取它,存储后续持续时间可以简单地为另一个“结束”日期时间。

如果其任意的持续时间(电影长度等)我将简单地将其存储为秒的整数,然后添加在表示层美化代码,以显示它作为小时/天等谨慎

0

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

至于持续时间的价值,我会让它成为你需要的最小时间值。这样,如果您有5分钟的最小值,那么该列应该在几分钟内。如果你在几秒钟内有一个最小值,那么它应该在几秒钟内。

1

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

在我们的数据库中,我们只是为了安全的做法,并以秒为单位存储开始时间,结束时间和持续时间。