2012-01-15 15 views
2

クエリ1作品が、クエリ2にはありません:このMySQLクエリでBETWEENが動作しないのはなぜですか?

クエリ#1:

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

クエリ#2:第二1のように同じことを行うことができるはず

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

最初は、なぜそれが機能していないのかわかりません。いずれかのクエリ#で一日

- MONTH -

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

YEAR:usersテーブル内

DOB(生年月日)フィールドには、次のようになりレコードを持つタイプdateフィールドです1または2私は1994-1-14が今日から正確に18歳で、1993-1-14が今日から19歳なので、18歳から19歳のすべてのユーザーを取り戻そうとしています。それでは、クエリ間を動作させる方法はありますか?

私はそれが動作しているクエリの間にデータベースからレコードを返さないことを意味します。

また、より効率的なbetweenクエリですか、またはパフォーマンスの違いはごくわずかですか?

+0

2つの日付を切り替えて作業する必要があると推測します。 – Kyra

答えて

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つ目のクエリで2つの日付を切り替えてみてください。

関連する問題