2012-01-15 76 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個日期。

相關問題