MSSQL针对一天或一天​​范围的日期范围的最佳查询

Eri*_*ric 7 sql sql-server datetime range

我想找出针对具有日期(没有时间)的日期时间记录集的查询的"最佳实践"方法.

我使用几个查询根据日期范围从使用日期时间数据类型的记录集返回记录,这意味着需要使用两者之间的范围来检查每个记录.

查询示例如下:

Select * 
FROM Usages 
where CreationDateTime between '1/1/2012' AND '1/2/2012 11:59:59'
Run Code Online (Sandbox Code Playgroud)

我知道使用BETWEEN资源是一种资源,并且检查日期的日期时间数据类型总是非常耗费资源,但我想听听其他人在这种情况下使用(或将使用)的内容.

我是否会将日期时间记录转换为日期的任何类型的性能提升:

Select * 
FROM Usages 
where CONVERT(DATE,CreationDateTime) between '1/1/2012' AND '1/2/2012'
Run Code Online (Sandbox Code Playgroud)

或者可能做一个少于/更大的检查呢?

Select * 
FROM Usages 
where (CreationDateTime > '1/1/2012') 
    AND (CreationDateTime < '1/2/2012 11:59:59')
Run Code Online (Sandbox Code Playgroud)

Mat*_*lie 8

你认为你知道的不正确.

使用BETWEEN或DATETIME数据类型都不是资源占用.

如果您索引列,该列确实是DATETIME而不是VARCHAR(),并且您没有将该字段包装在函数中,那么一切都会很好而且快速.

那就是说,我会使用>=<不是.不是为了表现,而是为了逻辑正确.

WHERE
  myField >= '20120101'
  AND myField < '20120102'
Run Code Online (Sandbox Code Playgroud)

无论字段是否包含小时,分钟或甚至(具有神话数据类型)pico秒,这都将起作用.

使用该字段的索引,它还将提供范围扫描.

你不会更快.不需要技巧或功能.

  • @eric - ''20120201T00:00:00.000'的好处是它不依赖于语言*(日期部分总是被解释为'YYYYMMDD')*.''02/01/2012'`可以是2月1日或1月2日,具体取决于你来自哪里. (3认同)