查询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
查询效率更高还是性能差异可以忽略不计?
答案 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()将值显式转换为所需的数据类型。