在SQL Server中,在两个单独的日期列中拆分时间和日期是最佳做法?

时间:2010-12-17 18:43:54

标签: sql sql-server database database-design

最佳做法是在两个日期时间SQL列中拆分dateTime吗?

例如,2010-12-17 01:55:00.000分为两个列,

  • 包含日期时间的一列 日期部分:2010-12-17 00:00:00.000
  • 包含日期时间的一列 时间部分:1900-01-01 01:55:00.000

我被告知这是最佳做法,因为在某些时候,SQL 2000不允许在约会中投入时间?并且甚至存在强制执行此操作的数据存储标准,并且一些公司已确保以这种方式存储所有数据以符合某些数据存储标准?

如果是这种情况,我肯定有人在这里听说过,这听起来很熟悉吗?

3 个答案:

答案 0 :(得分:12)

在sql server 2008中,您有日期和时间数据类型,因此这成为一个非问题。 datetime总是允许时间甚至回到sql server 6和7

人们将其拆分的原因是因为1列中的所有内容都是一个查询,它返回所有在3到4点之间放置的订单,需要扫描,时间列可以通过搜索完成(很多,很多)更快)

答案 1 :(得分:4)

从SQL 2005开始,我只会做一列。

如果您希望此信息为Sargable,我会使用computed columns代替。这样您就可以查询日期或时间或两者,并且您的应用程序代码仅负责维护一列。

答案 2 :(得分:0)

我知道这是旧的,但你可能想要分开的另一个原因是用户输入(GenEric在评论中说这是用于时间管理)。如果您允许用户将日期/时间作为单独的字段输入,并且您希望能够保存任何一个字段为空的数据,那么在数据库中有两个单独的可归零字段是很好的。否则我猜你要么必须求助于某些日期值等于“空”的kludges,要么将额外的位字段添加为“无时间/无日期”标志。