在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,因为:

  • varchar受到语言/日期格式问题的影响
    示例:为什么我的CASE表达式不确定?
  • 浮动依赖于内部存储
  • 它通过改变“0”基数来延伸到制定出月份的第一天,明天等
  • 编辑,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

    下一篇: Default Value based on a if command