2009-05-01 19 views
7

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

我正在使用MS SQL Server Express 2005.

谢谢!

弥敦道

回答

4

我仍然会用DateTime数据类型,而忽略日期值推荐 - 最好使用SQL(谷歌它)的静态为MinDate。这将为您提供使用强类型字段的好处,唯一的成本将会是几个额外的字节。

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

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

  • SQL Server 2008添加了Time数据类型,因此您可能需要考虑这一点。
  • 您可以使用SQL 2005的日期时间类型,与CONVERT功能结合起来只提取HH:MM:SS.MMM
  • 不同的SQL版本支持不同的最短日期。你可以使用将由所有如1/1/2000支持静态日期,或者你可以使用SQL 2005的最低值,1753年1月1日及追加时间值到startic日

所以如果你坚持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。

+0

请注意,以这种方式使用CONVERT将禁用任何使用日期时间列上的索引 – 2009-05-01 20:25:42

+0

有趣的是,我没有意识到这种效果。感谢您的提示 – STW 2009-05-01 21:48:14

+0

对于未来的读者,在使用此方法之前请检查@tvanfosson发表的评论http://stackoverflow.com/questions/812631/store-time-of-the-day-in-sql?lq=1#comment622411_812669 – Termiux 2013-04-24 20:33:44

1

根据需要,您可以将它作为int存储为24小时时间和格式。

或者其存储为一些固定的日期一datetime和删除它根据需要显示: 2000年1月1日下午4时30

我会用时间字段去,因为它可以让你所有的日期时间相关的电源功能。

1

您可能需要考虑将其存储为表示自午夜以来的分钟数的int列。在你的实体中,你可以将它公开为表示同一事物的TimeSpan(或int)。为了执行查询,您只需要在显示值(时间格式)和数据库值(分钟)之间进行转换,这可以很容易地在您的实体中完成(例如TimeSpan.TotalMinutes)。

6

就我个人而言,我会发现这是升级到2008年有一个单独的时间数据类型的原因。

0

对我来说,这听起来像你正在开发一种类型的会议调度程序或显示会议的东西。

我认为我将它设置为2列MeetingStart和MeetingEnd,都作为日期时间字段。这样,您可以确定会议的长度,并且由于您已有日期,因此您可以轻松使用该日期将其显示在日历或其他内容上。