在SQL中存储一天的时间

Nat*_*n H 7 sql sql-server time types sql-server-2005

你如何在SQL中存储时间或时间范围?它不会是一个日期时间,因为它只是让我们说下午4:30(不是1月3日下午4:30).那些是每周或每日会议.我需要的查询类型当然是用于显示,但稍后还将包括复杂查询,例如避免计划中的冲突.我现在宁愿选择最好的数据类型.

我正在使用MS SQL Server Express 2005.

谢谢!

弥敦道

HLG*_*GEM 6

我个人认为这是升级到2008年的一个原因,它有一个单独的时间数据类型.


STW*_*STW 4

我建议仍然使用 DateTime 数据类型并忽略日期值——最好使用 SQL 的静态 MinDate(Google 一下)。这将为您带来使用强类型字段的好处,唯一的成本是一些额外的字节。

至于范围,将它们存储在两个单独的列中。然后你可以用一个减去另一个来确定差异。

编辑:做了一些谷歌搜索。

  • SQL Server 2008 添加了时间数据类型,因此您可能需要考虑这一点。
  • 您可以使用 SQL 2005 的 DateTime 类型并将其与 CONVERT 函数组合以仅提取 HH:MM:SS.MMM
  • 不同的 SQL 版本支持不同的最小日期。您可以使用所有支持的静态日期,例如 1/1/2000,或者您可以使用 SQL 2005 的最小值 1/1/1753 并将时间值附加到该开始日期

因此,如果您坚持使用 2005 年,请选择静态日期,例如 1/1/2000,并将您的时间存储在其中。因此 1m:30s 将是 2000-1-1 00:01:30.000,1h:15m 将是 2000-1-1 01:15:00.000

然后,您可以执行 Date2 - Date1 并获得 (1h:15:m - 1m:30s) 2000-01-01 01:13:45.000 的结果。转换它,您将得到 1:13:45。