使用Cast As Date与DateTime作为Between

0pe*_*tor 1 sql sql-server

这是:

between cast(date as date) and cast(date1 as date)
Run Code Online (Sandbox Code Playgroud)

同样如下:

between '01/01/01 00:00:00' and '01/01/01 11:59:59'
Run Code Online (Sandbox Code Playgroud)

我被告知,在比较SQL Server中的日期时间值时,如果我想返回PROPER结果,我应该总是包含一个带有我的日期的时间组件.

Gor*_*off 5

不要使用between日期.这只是冒险.通常,使用正确的语法是:

where dtcol >= @date1 and
      dtcol < dateadd(day, 1, @date2)
Run Code Online (Sandbox Code Playgroud)

注意不等式的方向.这适用于日期和日期/时间的列.所以,它只是有效.

Aaron Bertrand有一篇很棒的博客文章,BETWEEN和魔鬼有什么共同之处?.

  • 您应该努力不修改`WHERE`子句中带有表达式的列.如果这样做,引擎可能会忽略索引并且必须执行完整扫描. (2认同)