Answers:
该最快的,如果你要遍历一个记录,并没有在SQL Server 2008中日期
SELECT DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)
关于StackOverflow的两个不同而出色的答案证明了这一点:一,二
Varchar转换是最糟糕的方法之一。当然,对于一个值来说可能并不重要,但这是一个养成的好习惯。
这种方法也是确定性的,例如,是否要为计算列编制索引。即使是撰写有关SQL Server的书籍的人也会被日期时间转换所困扰
该技术也是可扩展的。
DATEADD(day, DATEDIFF(day, 0, GETDATE()), -1)
DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0)
DATEADD(month, DATEDIFF(month, 0, GETDATE()), -1)
DATEADD(month, DATEDIFF(month, 0, GETDATE()), 31)
编辑:
正如我提到的确定性一样,除非使用样式112,否则varchar方法并不安全。
这里的其他答案指出,您永远不会将其应用于列。这是正确的,但是您可能要选择10万行或添加计算列或GROUPBY dateonly。然后,您必须使用此方法。
另一个答案也提到了样式110。这不是语言或SET DATEFORMAT安全的语言,并且以“英国”语言设置失败。请参阅 Tibor Karaszi撰写的有关日期时间数据类型的最终指南。