解决方法
如果必须迭代记录集并且在sql Server 2008中没有日期,则速度最快
SELECT DATEADD(day,DATEDIFF(day,GETDATE()),0)
StackOverflow上有两个不同且优秀的答案:One,Two
Varchar转换是最糟糕的方法之一.当然,对于一个价值而言,这可能并不重要,但这是一个很好的习惯.
这种方式也是确定性的,例如,如果要索引计算列.即使编写有关sql Server的书籍的人也会得到caught out with datetime conversions
这种技术也是可扩展的.
>昨天:DATEADD(day,– 1)
>月初:DATEADD(月,DATEDIFF(月,0)
>上个月末:DATEADD(月,– 1)
>下个月的开始:DATEADD(月,31)
编辑:
正如我提到的确定性,除非使用样式112,否则varchar方法并不安全.
这里的其他答案指出,您永远不会将其应用于列.这是正确的,但您可能希望选择100k行或添加计算列或GROUP BY dateonly.然后你必须使用这种方法.
另一个答案也提到了样式110.这不是语言或SET DATEFORMAT安全,并且失败了“英国”语言设置. See the ultimate guide to the datetime datatypes by Tibor Karaszi.