简短问题:
在SQL Server中使用的最佳日期格式是什么?
长解释:
我们将数据库从mysql转换为SQL Server。在mysql中,我们总是使用int(11)
来避免夏令时问题,我们是否应该在mysql中做同样的事情(或DATETIME
是否足够好)?
日期的使用各不相同。大多数时候,他们只是提供有关何时发生各种事情的信息(用于记录目的)。有时他们会习惯于完成工作。
我们正在使用2005年(叹气),但我也很想听听2008年。
答案 0 :(得分:4)
我一直使用DATETIME在MSSQL Server中存储时间。它使日期和时间函数变得非常简单 - 我不确定需要编写多少自定义代码才能在使用int的日期/时间处理中获得相同级别的功能和速度。要解决夏令时问题,您可以将日期和时间存储在UTC而不是服务器时间。您可以使用DateTime.Now
和getDate()
,而不是DateTime.UtcNow
或getutcdate()
。
答案 1 :(得分:4)
那些告诉你只是总是使用日期时间的人并没有彻底阅读你的问题,而是错过了夏令时问题。通常我自己推荐datetime,但有些情况下这种类型可能会让你失望。
在这种情况下,因为你可能已经有代码来处理int =>在需要的日期时间转换,你也可以坚持下去。
另一方面,如果你要进入sql server 2008(而不是2000或2005),那么有新的datetime2
和datetimeoffset
类型可能更适合你的需求,你可能会考虑重构。
答案 2 :(得分:2)
我认为日期应始终保存为日期类型(根据需要在时区,时间部分中排除/排除)。
请参阅此处了解可能性(假设您使用的是SQL Server 2008):
答案 3 :(得分:2)
我同意Dave K,所有日期都应存储为日期数据类型。
话虽如此,是否有将日期存储为其他类型的具体原因?如果您要经历从日期格式转换为其他类型的麻烦,并且可能会在以后再次转换为日期格式,那么所有这些努力的原因是什么?
答案 4 :(得分:1)
使用SQL Server 2008可以获得大量日期类型:
所以,选择你的毒药。
答案 5 :(得分:0)
这取决于您需要什么以及您的数据有多远,以及您将使用哪个sql server版本。 2008年有一些2005年没有的新日期数据类型。
答案 6 :(得分:0)
easies选项通常用于将日期/时间存储在datetime
类型列中,并始终将时间存储在UTC时区中。这样你就不会有日光节省的问题。然后,您可以显然将时间转换为客户端使用的任何时区,以显示值。