在SQL中存储一天的时间

时间:2009-05-01 18:35:06

标签: sql sql-server sql-server-2005 time types

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

我正在使用MS SQL Server Express 2005。

谢谢!

5 个答案:

答案 0 :(得分:6)

我个人认为这是升级到具有单独时间数据类型的2008的原因。

答案 1 :(得分:4)

我建议仍然使用DateTime数据类型并忽略日期值 - 理想情况下使用静态MinDate for SQL(Google it)。这将为您提供使用强类型字段的好处,唯一的成本将是一些额外的字节。

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

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

  • SQL Server 2008添加了Time数据类型,因此您可能需要考虑这一点。
  • 您可以使用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。

答案 2 :(得分:1)

您可以将其作为int存储为24小时,并根据需要进行格式化。

或者将其存储为具有固定日期的日期时间,并根据需要将其删除以进行显示: 2000年1月1日下午4:30

我会使用datetime字段,因为它为您提供了所有与日期时间相关的功能。

答案 3 :(得分:1)

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

答案 4 :(得分:0)

对我来说,这听起来像是在开发一种会议日程安排程序或其他东西来显示会议。

我认为我会将它设置为2列MeetingStart和MeetingEnd,两者都作为datetime字段。通过这种方式,您可以确定会议的长度,并且由于您已经拥有日期,因此可以轻松地将其用于在日历或其他内容上显示。