为什么BETWEEN不能在这个MySQL查询中工作?

时间:2012-01-15 22:39:21

标签: mysql

查询1有效,但查询2没有:

查询#1:

SELECT * FROM `users` WHERE users.dob <= '1994-1-14' AND users.dob >= '1993-1-14' LIMIT 10

查询#2:

SELECT * FROM `users` WHERE users.dob BETWEEN '1994-1-14' AND '1993-1-14' LIMIT 10

第二个应该可以做与第一个相同的事情,但我不明白为什么它不起作用。

users表中的dob(出生日期)字段是类型date字段,其记录如下所示:

1988-11-08  
1967-11-14  
1991-03-09      
1958-03-08  
1967-06-30  
1988-10-19   
1986-01-23  
1965-09-20

年 - 月 - 日

无论是查询#1还是#2,我都试图找回18到19岁之间的所有用户,因为1994-1-14距离今天正好是18年,1993-1-14是19从今天开始。那么有没有办法让查询之间有效?

如果不工作,我的意思是它在工作查询时不会从数据库返回任何记录。

between查询效率更高还是性能差异可以忽略不计?

2 个答案:

答案 0 :(得分:4)

回答第一部分:“expr BETWEEN min AND max”。尝试在第二个查询中切换这两个日期。

答案 1 :(得分:2)

使用错误。请参阅BETWEEN文档:

expr BETWEEN min AND max相当于(min <= expr AND expr <= max)

因此,users.dob BETWEEN '1994-1-14' AND '1993-1-14'('1994-1-14' <= users.dob AND users.dob <= '1993-1-14')相同,其结果永远不会超过0。

只需撤销订单:)

使用任何一种表格时都不会有性能差异,可能会受到以下注释的影响。此转换发生在查询计划程序级别。但是,如果您有疑虑,请记住个人资料,个人资料,个人资料。然后你可以亲眼看看并安抚过早优化的恶魔。


另请注意......注意:

  

为了在将BETWEEN与日期或时间值一起使用时获得最佳结果,请使用CAST()将值显式转换为所需的数据类型。