2009-11-13 63 views
1

简短问题:SQL Server中的日期格式

什么是SQL Server中使用的最佳日期格式?

长说明:

我们正在将我们的数据库从mysql转换为SQL Server。在mysql中,我们总是使用int(11)来避免夏令时问题,如果我们在mysql中做同样的事情(或者是DATETIME够好)?

日期的使用各不相同。大多数情况下,他们只是提供有关发生各种事情的信息(用于记录目的)。有时他们习惯于下单工作。

我们正在使用2005(叹气),但我很想听听2008年的情况。

+0

这是一个难以回答的问题,不理解日期的目的和解释。请提供背景吗? – shahkalpesh 2009-11-13 19:11:56

+0

使用纪元时间不一定总是避免DST问题。 – BalusC 2009-11-13 19:22:03

+1

日期格式(11/12/2009 11月12日或12月11日)?或数据类型? – gbn 2009-11-13 19:22:33

回答

4

我一直使用DATETIME存储时间MSSQL服务器。它使日期和时间函数变得非常简单 - 我不知道需要编写多少自定义代码才能在使用int进行日期/时间处理时获得相同级别的功能和速度。为了解决夏令时问题,您可以使用UTC存储日期和时间,而不是服务器时间。您可以使用DateTime.UtcNowgetutcdate(),而不是使用DateTime.NowgetDate()

+0

它看起来像DateTime.UtcNow()将允许我们用正确的时间填充日期时间字段。我们必须特别注意把客户的时间投入到现场,但无论如何您总是需要这样做。 另一种解决方案是使用DATETIMEOFFSET,但因为我们现在使用的是2005年,所以这不是我们的选择。 – 2009-11-16 16:08:06

2

我同意戴夫K,所有日期应该作为日期数据类型存储。

这就是说,是否存在将日期存储为其他类型的特定原因?如果您要经历从日期格式转换为其他类型的麻烦,并且可能稍后再回到日期格式,那么所有这些工作的原因是什么?

+0

这都是关于不转换。一旦你有当地时间的日期,你不能分辨我们回滚当天的第一个和第二个上午两点之间的区别。 – 2009-11-16 16:05:28

+0

这可能是将日期存储在UTC而不是本地时区的一个很好的理由。 – 2009-11-18 02:30:31

0

这取决于您需要什么以及您的数据传输的距离,以及您要使用的SQL Server版本。 2008有一些2005年没有的新日期数据类型。

data types

0

的easies选项通常是日期/时间存储在datetime类型列,并始终保存在UTC时区的时间。这样你就不会遇到节省日光的问题。然后,您可以明显地将时间转换为客户端用于显示值的任何时区。

4

那些告诉你只是总是使用日期时间的人没有彻底地读你的问题,并且错过了你有夏令时问题的部分。通常我会推荐自己的日期时间,但有些情况下这种类型可能会让你失望。

在这种情况下,由于您大概已经有了处理int => datetime转换的代码,您可以坚持这一点。另一方面,如果你打算使用sql server 2008(而不是2000或2005),有新的datetime2datetimeoffset类型可能更适合你的需求,你可能会考虑重构。

1

有了SQL Server 2008,你获取日期类型过多:

所以,挑选你的毒药。