简短问题:SQL Server中的日期格式
什么是SQL Server中使用的最佳日期格式?
长说明:
我们正在将我们的数据库从mysql转换为SQL Server。在mysql中,我们总是使用int(11)
来避免夏令时问题,如果我们在mysql中做同样的事情(或者是DATETIME
够好)?
日期的使用各不相同。大多数情况下,他们只是提供有关发生各种事情的信息(用于记录目的)。有时他们习惯于下单工作。
我们正在使用2005(叹气),但我很想听听2008年的情况。
简短问题:SQL Server中的日期格式
什么是SQL Server中使用的最佳日期格式?
长说明:
我们正在将我们的数据库从mysql转换为SQL Server。在mysql中,我们总是使用int(11)
来避免夏令时问题,如果我们在mysql中做同样的事情(或者是DATETIME
够好)?
日期的使用各不相同。大多数情况下,他们只是提供有关发生各种事情的信息(用于记录目的)。有时他们习惯于下单工作。
我们正在使用2005(叹气),但我很想听听2008年的情况。
我一直使用DATETIME存储时间MSSQL服务器。它使日期和时间函数变得非常简单 - 我不知道需要编写多少自定义代码才能在使用int进行日期/时间处理时获得相同级别的功能和速度。为了解决夏令时问题,您可以使用UTC存储日期和时间,而不是服务器时间。您可以使用DateTime.UtcNow
和getutcdate()
,而不是使用DateTime.Now
或getDate()
。
它看起来像DateTime.UtcNow()将允许我们用正确的时间填充日期时间字段。我们必须特别注意把客户的时间投入到现场,但无论如何您总是需要这样做。 另一种解决方案是使用DATETIMEOFFSET,但因为我们现在使用的是2005年,所以这不是我们的选择。 – 2009-11-16 16:08:06
我认为日期应该总是保存为日期类型(带时区,时间部分在必要时排除)。
看到这里的可能性(假设你使用SQL Server 2008):
我同意戴夫K,所有日期应该作为日期数据类型存储。
这就是说,是否存在将日期存储为其他类型的特定原因?如果您要经历从日期格式转换为其他类型的麻烦,并且可能稍后再回到日期格式,那么所有这些工作的原因是什么?
这都是关于不转换。一旦你有当地时间的日期,你不能分辨我们回滚当天的第一个和第二个上午两点之间的区别。 – 2009-11-16 16:05:28
这可能是将日期存储在UTC而不是本地时区的一个很好的理由。 – 2009-11-18 02:30:31
这取决于您需要什么以及您的数据传输的距离,以及您要使用的SQL Server版本。 2008有一些2005年没有的新日期数据类型。
的easies选项通常是日期/时间存储在datetime
类型列,并始终保存在UTC时区的时间。这样你就不会遇到节省日光的问题。然后,您可以明显地将时间转换为客户端用于显示值的任何时区。
那些告诉你只是总是使用日期时间的人没有彻底地读你的问题,并且错过了你有夏令时问题的部分。通常我会推荐自己的日期时间,但有些情况下这种类型可能会让你失望。
在这种情况下,由于您大概已经有了处理int => datetime转换的代码,您可以坚持这一点。另一方面,如果你打算使用sql server 2008(而不是2000或2005),有新的datetime2
和datetimeoffset
类型可能更适合你的需求,你可能会考虑重构。
有了SQL Server 2008,你获取日期类型过多:
所以,挑选你的毒药。
这是一个难以回答的问题,不理解日期的目的和解释。请提供背景吗? – shahkalpesh 2009-11-13 19:11:56
使用纪元时间不一定总是避免DST问题。 – BalusC 2009-11-13 19:22:03
日期格式(11/12/2009 11月12日或12月11日)?或数据类型? – gbn 2009-11-13 19:22:33