在SQL Server中删除部分日期时间的最佳方法
从SQL Server的日期时间字段中删除时间部分时,哪种方法提供最佳性能?
a) select DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)
要么
b) select cast(convert(char(11), getdate(), 113) as datetime)
第二种方法确实发送了几个字节,但这可能不如转换速度那么重要。
两者似乎都非常快,但是在处理数百或数千行时,速度可能会有所不同。
另外,有没有可能有更好的方法来摆脱SQL中的日期时间部分?
严格地说,方法a
是资源密集度最低的:
a) select DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)
在相同的总持续时间内,经过验证的CPU占用时间减少了一百万行,而他们手中的时间太多:SQL Server中从日期+时间获取日期的最有效方法?
我在别处也看到了类似的测试,结果也类似。
我更喜欢DATEADD / DATEDIFF,因为:
示例:为什么我的CASE表达式不确定?
编辑,2011年10月
对于SQL Server 2008+,您可以CAST date
。 或者只是使用date
所以没有时间去除。
编辑,2012年1月
这是一个灵活的工作示例:需要通过在SQL Server中舍入时间或日期数字来计算
编辑,2012年5月
不要在没有考虑的情况下在WHERE子句等中使用它:向列添加函数或CAST会使索引使用无效。 请参阅第2页:http://www.simple-talk.com/sql/t-sql-programming/ten-common-sql-programming-mistakes/
现在,这确实有一个后来的SQL Server优化版本管理CAST的日期正确的例子,但通常这将是一个坏主意......
在SQL Server 2008中,您可以使用:
CONVERT(DATE, getdate(), 101)
当然,这是一个古老的线程,但要完成。
从SQL 2008开始,您可以使用DATE数据类型,以便您可以简单地执行:
SELECT CONVERT(DATE,GETDATE())
链接地址: http://www.djcxy.com/p/94363.html
上一篇: Best approach to remove time part of datetime in SQL Server