我记得在某个地方听到或读到过,说到:
比...更高效
SELECT * from TABLE where date >= '2009-01-01' AND date <= '2009-12-31'
比...更高效
SELECT * from TABLE where date BETWEEN '2009-01-01' AND '2009-12-31'
日期列是DATETIME类型,并且具有相同的索引。这样正确吗?
DATE_TIME between '01/01/2013' and '01/01/14'
的语法等价于DATE_TIME >= '01/01/2013' and DATE_TIME < '01/01/14'
。两者都是可搜索的。 - craigCAST(DATE_TIME AS DATE) BETWEEN '01/01/2013' and '01/01/14'
? - QuassnoiCAST(DATE_TIME AS DATE) BETWEEN '01/01/2013' AND '12/31/2013'
在功能上等同于(具有相同的结果)DATE_TIME between '01/01/2013' and '01/01/14'
——两者的成本相同。话虽如此,与非转换语法相比,CAST()
操作有更多的操作(例如Compute Scalar
、Merge Interval
)。 - craigdatetime
类型,那么between '01/01/2013' and '01/01/14'
和DATE_TIME >= '01/01/2013' and DATE_TIME < '01/01/14'
在语法上不等价:第一个匹配的是2014-01-01 00:00:00.000
,第二个则不是。而CAST
操作没有任何额外的操作:它只是被优化器重写成了你的第二个表达式。 - Quassnoi01/01/14 00:00:00.000
这个值。SQL Fiddle可供验证。 - craig