2012-01-15 77 views
2

查询1的作品,但查询2不:为什么BETWEEN不能在这个MySQL查询中工作?

查询#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 

第二届一个应该能够做同样的事情,第一,但我不明白为什么它不起作用。在用户表

的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查询效率更高还是性能差异微不足道?

+0

猜测你应该切换两个日期来让你的工作之间: – Kyra 2012-01-15 22:42:25

回答

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个结果。

只需按顺序:)

使用这两种形式,可能受到下面的注意事项时

不会有性能差异。这种转换发生在查询计划者级别。但是,如果您有疑虑,请记住个人资料,个人资料,个人资料。然后你可以看到自己并安抚过早优化的恶魔。


还要注意!注意:有日期或时间值之间使用时

为了达到最佳效果,请使用CAST()的值显式转换为所需的数据类型。

4

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

相关问题