我记得在某个地方听过或读过
SELECT * from TABLE where date >= '2009-01-01' AND date <= '2009-12-31'
Run Code Online (Sandbox Code Playgroud)
效率比
SELECT * from TABLE where date BETWEEN '2009-01-01' AND '2009-12-31'
Run Code Online (Sandbox Code Playgroud)
其中date列是DATETIME类型且具有相同的索引.它是否正确?
Qua*_*noi 11
不,这不正确.
两种语法都完全相同.
BETWEEN 只是一种语法糖,一种简写 >= … AND <= …
同样适用于所有主要系统真(Oracle,MySQL,PostgreSQL),不仅对SQL Server.
但是,如果要检查当前年份的日期,则应使用以下语法:
date >= '2009-01-01' AND date < '2010-01-01'
Run Code Online (Sandbox Code Playgroud)
请注意,最后一个条件是严格的.
这在语义上是不同的,BETWEEN并且它是查询当前年份的首选方式(而不是YEAR(date) = 2009哪个不可思考).
您不能将此条件重写为,BETWEEN因为最后一个不等式是严格的,BETWEEN条件包括范围边界.
你需要严格的条件,因为DATETIME与整数不同,它不是很有序,也就是说你不能告诉"最后可能的日期时间值2009"(当然,这不是特定于实现的).