2012-01-15 2 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 : 2 사람이 같은 일을 할 수 있어야

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

첫 번째지만 그것이 작동하지 않는 이유를 이해하지 못합니다. 두 쿼리 번호로 DAY

- 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 

년도 : 사용자 테이블에

생년월일 (생년월일) 필드는 다음과 같이 기록과 유형 date 필드 1 또는 # 2 1994-1-14은 오늘부터 정확히 18 년이고 1993-1-14은 오늘부터 19 년이므로 18 세에서 19 세 사이의 모든 사용자를 다시 돌려 받으려고합니다. 그렇다면 쿼리를 작동시키는 방법이 있습니까?

작동하지 않는 것은 작동하는 쿼리가 수행하는 동안 db의 레코드를 반환하지 않는다는 의미입니다.

between 쿼리가 더 효율적입니까, 아니면 성능 차이가 미미합니까?

+0

두 날짜 사이를 전환해야합니다. – 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"입니다. 두 번째 쿼리에서 두 날짜를 전환 해보십시오.

관련 문제