在SQL中存储一天中的时间

在SQL中存储一天中的时间,sql,sql-server,sql-server-2005,time,types,Sql,Sql Server,Sql Server 2005,Time,Types,如何在SQL中存储时间或时间范围? 它不会是一个约会时间,因为它只会是下午4:30(不是1月3日下午4:30)。 这将是每周或每天的会议。 我需要的查询类型当然是用于显示的,但稍后也将包括复杂的查询,例如避免计划中的冲突。 我现在宁愿选择最好的数据类型 我正在使用MS SQL Server Express 2005 谢谢 Nathan我建议仍然使用DateTime数据类型并忽略日期值——最好使用静态MinDate for SQL(Google it)。这将为您提供使用强类型字段的好处,并且只需额

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

我正在使用MS SQL Server Express 2005

谢谢


Nathan

我建议仍然使用DateTime数据类型并忽略日期值——最好使用静态MinDate for SQL(Google it)。这将为您提供使用强类型字段的好处,并且只需额外花费几个字节

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

编辑:做了一些谷歌搜索

    SQL Server 2008添加了一个时间数据类型,因此您可能需要考虑这一点。
  • 您可以使用SQL2005的DateTime类型,并将其与CONVERT函数结合起来,仅提取HH:MM:SS.MMM
    • 选择CONVERT(VARCHAR(12),GETDATE(),114)作为[HH:MI:SS(24H)]()
  • 不同的SQL版本支持不同的最小日期。您可以使用所有支持的静态日期,例如1/1/2000,也可以使用SQL 2005的最小值1/1/1753,并将时间值附加到该起始日期
所以,如果你坚持2005年,选择你的静态日期,比如2000年1月1日,并在上面存储你的时间。所以1m:30s是2000-1-100:01:30.000,1h:15m是2000-1-101:15:00.000


然后你可以做Date2-Date1,得到你的结果(1h:15:m-1m:30s)2000-01-01:13:45.000。将其转换为1:13:45。

您可以根据需要将其存储为24小时时间和格式的整数

或者将其存储为具有固定日期的日期时间,并根据需要将其删除以显示: 二零零零年一月一日下午四时三十分


我将与DATETIME字段一起使用,因为它为您提供了所有与DATE相关的功能的权限。

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

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

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


我想我应该用两列MeetingStart和MeetingEnd将其设置为p,这两列都是datetime字段。通过这种方式,您可以确定会议的长度,并且由于您已经有了日期,您可以轻松地将其显示在日历或其他内容上。

这是一个公平的解决方案,但查看表格时不直观,也不容易更改(如果他们想提高分辨率,怎么办?他们必须修改现有值)。使用提供的数据类型,特别是对于具有内在规则(如时间)的数据,可以避免进行大量的手工计算,也可以让未来的开发人员更清楚地看到这一点。假设所需精度为秒,另一种选择是hhmmss格式的int。如果您需要计算两个时间之间的差异,则没有那么有用,但有助于更可读的查询-其中时间>=120000且时间<130000。@Yooder-正是因为使用DateTime可能会让未来的开发人员感到困惑,所以我会避免使用它。通常,对于DateTime,您希望日期部分是有效的。如果未来的开发人员决定使用其他日期作为固定点(或使用DateTime.Today),会发生什么。将其存储为一列,并使用合适的名称“MinutesFromMidnight”可以非常清楚地说明其意图。数学计算结果与下午2:30差不多,仍然是下午1:30之后和下午2:30之前。转换很简单:TimeSpan.FromMinutes()。TimeSpan也很容易格式化。请注意,以这种方式使用CONVERT将禁止在datetime列上使用任何索引。有趣的是,我没有意识到这种效果。感谢未来读者的提示,在使用此方法之前,请检查@tvanfosson的评论,我支持此观点,特别是因为我们正在讨论速成版(我希望这不是一个大的生产系统)。一点升级的痛苦在这里是值得的。