[SQL] SQL : 대 BETWEEN <= 및> =
SQLSQL : 대 BETWEEN <= 및> =
SQL 서버 2000과 2005 :
쿼리 1 :
SELECT EventId, EventName
FROM EventMaster
WHERE EventDate BETWEEN '10/15/2009' AND '10/18/2009'
질의 2 :
SELECT EventId, EventName
FROM EventMaster
WHERE EventDate >='10/15/2009'
AND EventDate <='10/18/2009'
(편집 : 쿼리 구문이 잘못 그래서 두 번째 EVENTDATE 원래 누락되었다)
해결법
-
==============================
1.그들은 동일합니다 : 사이의 문제의 긴 구문에 대한 속기입니다.
그들은 동일합니다 : 사이의 문제의 긴 구문에 대한 속기입니다.
어디 BETWEEN 예를 들어, 작동하지 않는 대안 이상 구문을 사용하여
Select EventId,EventName from EventMaster where EventDate >= '10/15/2009' and EventDate < '10/18/2009'
(참고 <보다는 <= 초 상태).
-
==============================
2.그들은 동일합니다.
그들은 동일합니다.
주의해야 할 것은, 당신이 DATETIME에이를 사용하는 경우, 종료 날짜의 일치 하루의 시작이 될 것입니다 :
<= 20/10/2009
하지와 동일합니다 :
<= 20/10/2009 23:59:59
(: 00 : <20/10/2009 00 =에 대해이 일치합니다 00.000를)
-
==============================
3.BETWEEN 읽기 및 유지 관리가 용이하지만은 폐쇄 간격 이전에 언급 한 바와 같이이 기간에 문제가 될 수 있기 때문에, 나는 거의 사용을 권장하지 않습니다 - 심지어 시간 구성 요소없이.
BETWEEN 읽기 및 유지 관리가 용이하지만은 폐쇄 간격 이전에 언급 한 바와 같이이 기간에 문제가 될 수 있기 때문에, 나는 거의 사용을 권장하지 않습니다 - 심지어 시간 구성 요소없이.
월별 데이터를 처리 할 때 예를 들어, 첫 번째와 마지막 간의 날짜를 비교하는 것이 일반적이지만, 실제로이 DT 쓰기 쉬우> = 제 DT <(또한 시간 부분의 문제를 해결하는) 다음 최초 - 이후 최근 일반적으로 결정하는 단계 중 하나 이상 (하루 감산함으로써) 다음으로 우선 판단 이상이다.
또한, 다른 잡았다 하부 및 상부 경계 (즉, 로우 및 하이 BETWEEN) 정확한 순서로 지정해야 할 점이다.
-
==============================
4.키워드 사이의 모든 RDBMS 플랫폼에서 지원되지 않지만이 경우, 두 개의 쿼리는 동일해야합니다 - 일반적으로 차이가 없습니다.
키워드 사이의 모든 RDBMS 플랫폼에서 지원되지 않지만이 경우, 두 개의 쿼리는 동일해야합니다 - 일반적으로 차이가 없습니다.
당신에게 더 자연스러운 것 같습니다 하나를 사용 -있는 거 동일한가 있기 때문에, 정말 속도 또는 다른 어떤 측면에서 구별이 없다.
-
==============================
5.외 @marc_s, @Cloud 의해 언급 된 바와 같이. 그들은 기본적으로 폐쇄 된 범위에 대한 똑같아.
외 @marc_s, @Cloud 의해 언급 된 바와 같이. 그들은 기본적으로 폐쇄 된 범위에 대한 똑같아.
그러나 어떤 분수 시간 값 (큼 동등하거나 및보다 작음)를 후 단부 값 반 개방 범위에 반대 (크 또는 동등 이하 또는 동등) 폐쇄 된 범위에 문제가 발생할 수있다 가능한 마지막 순간.
그래서 쿼리로 다시 작성해야한다고 피하기 위해 :
SELECT EventId, EventName FROM EventMaster WHERE (EventDate >= '2009-10-15' AND EventDate < '2009-10-19') /* <<<== 19th, not 18th */
BETWEEN 반 개방 구간에 대한 작업을하지 않기 때문에 나는 항상 날짜 / 시간 쿼리에서 하드를 살펴 그 사용이 그 아마 오류입니다.
-
==============================
6.나는 수 있기 때문에 즉시 당신이 범위에 대한 하나 개의 필드를 확인하는 것을 독자에게 취소 BETWEEN에 대한 약간의 환경 설정을 가지고있다. 당신이 당신의 테이블의 유사한 필드 이름이있는 경우 이것은 특히 사실이다.
나는 수 있기 때문에 즉시 당신이 범위에 대한 하나 개의 필드를 확인하는 것을 독자에게 취소 BETWEEN에 대한 약간의 환경 설정을 가지고있다. 당신이 당신의 테이블의 유사한 필드 이름이있는 경우 이것은 특히 사실이다.
말을하면 내가 읽은 경우, 우리 테이블은 transactiondate과 transitiondate 모두 가지고
transactiondate between ...
나는 시험의 양쪽 끝이 하나의 필드에 반대하는 즉시 것을 알고있다.
내가 읽은 경우
transactiondate>='2009-04-17' and transactiondate<='2009-04-22'
나는 확실히 두 필드가 동일하게 여분의 시간이 걸릴해야합니다.
쿼리가 시간이 지남에 따라 편집됩니다로서 또한, 별거 프로그래머는 두 개의 필드를 분리 할 수 있습니다. 내가 좋아하는 뭔가를 말할 쿼리를 많이 봤어요
where transactiondate>='2009-04-17' and salestype='A' and customernumber=customer.idnumber and transactiondate<='2009-04-22'
그들이 간의 이것을하려고하면, 물론, 그것은 구문 오류 및 신속하게 해결 될 것입니다.
-
==============================
7.나는 유일한 차이점은 각 쿼리에 구문 설탕의 양을 생각합니다. BETWEEN 정확하게 두 번째 쿼리와 같은 말을 단지 매끄러운 방법입니다.
나는 유일한 차이점은 각 쿼리에 구문 설탕의 양을 생각합니다. BETWEEN 정확하게 두 번째 쿼리와 같은 말을 단지 매끄러운 방법입니다.
거기에 내가 잘 모르는 것 같아요 몇 가지 RDBMS의 특정 차이가있을 수 있습니다,하지만 난 정말 그렇게 생각하지 않습니다.
-
==============================
8.논리적으로 전혀 차이가 없습니다. 성능이 많다는 대부분에 - 일반적인 전혀 DBMSes- 차이가 없습니다.
논리적으로 전혀 차이가 없습니다. 성능이 많다는 대부분에 - 일반적인 전혀 DBMSes- 차이가 없습니다.
-
==============================
9.당신이 당신의 문자열 형식을 변경해야하고 경계 값은 날짜 범위 쿼리를 처리하는 방법을하는 이유에 대해 아론 버트 랜드에서이 우수한 블로그 게시물을 참조하십시오.
당신이 당신의 문자열 형식을 변경해야하고 경계 값은 날짜 범위 쿼리를 처리하는 방법을하는 이유에 대해 아론 버트 랜드에서이 우수한 블로그 게시물을 참조하십시오.
-
==============================
10.면책 조항 : 아래의 모든 단지 일화 내 개인적인 경험에서 직접 그려집니다. 난 경우보다 경험적으로 엄격한 분석을 수행까지 느끼는 사람은 그것을 실행에 오신 것을 환영 투표 아래입니다. 나는 내 시간을 가치 때문에, 내가 또한 SQL은 선언적 언어이고 당신은 당신이 그것을 쓸 때 코드가 처리되는 방법을 고려 했어야하지 않을 것을 알고 있지만.
면책 조항 : 아래의 모든 단지 일화 내 개인적인 경험에서 직접 그려집니다. 난 경우보다 경험적으로 엄격한 분석을 수행까지 느끼는 사람은 그것을 실행에 오신 것을 환영 투표 아래입니다. 나는 내 시간을 가치 때문에, 내가 또한 SQL은 선언적 언어이고 당신은 당신이 그것을 쓸 때 코드가 처리되는 방법을 고려 했어야하지 않을 것을 알고 있지만.
이 무한 논리적으로 동등한 문이 있지만, 나는 3 (틱)을 고려할 수 있습니다.
사례 1 : 표준 순서로 두 비교 (평가 순서가 고정)
사례 2 : 문법적 (평가 순서는 작성자가 선택되지 않는다)
사례 3 : 교육을 위해 두 개의 비교 (평가 위해 기입시 선택)
또는
그들은 데이터 세트 무지로 내 경험에 의하면, 사례 1과 사례 2는 성능에 어떤 일관성이나 주목할만한 차이가 없습니다.
그러나, 사례 3은 크게 실행 시간을 향상시킬 수 있습니다. 당신은 큰 데이터 세트 작업 및 발생하는 경우 A는 당신이 비교 사례 3을 사용하고 주문하여 눈에 띄게 실행 시간을 향상시킬 수 MinBound보다 MaxBound보다 크거나 작은 될 가능성이 있는지에 대해 구체적으로 어떤 경험적 지식을 가지고 따라서.
내가 가진 하나의 유스 케이스는 특정 구간 내에서 레코드가 아닌 인덱스 날짜와 큰 역사적 데이터 집합을 질의한다. 쿼리를 작성할 때, 나는 여부 더 많은 데이터의 좋은 아이디어가 지정된 간격 전에 또는 지정된 간격 후에 존재하고 그에 따라 내 비교를 주문할 수있을 것이다. 나는 실행 시간이 훨씬 절반은 데이터 세트의 크기, 쿼리의 복잡성, 최초의 비교에 의해 필터링 된 레코드의 양에 따라로 인하 했어.
from https://stackoverflow.com/questions/1630239/sql-between-vs-and by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 큰 성능 차이에 의해 구별 VS기를 사용할 때 (0) | 2020.04.06 |
---|---|
[SQL] SQL 서버 2008 : 어떻게 사용자 이름에 권한을 부여합니까? (0) | 2020.04.06 |
[SQL] VARCHAR 대 SQL SELECT 속도 INT (0) | 2020.04.06 |
[SQL] MySQL의 테이블에 VARCHAR 길이의 중요성 (0) | 2020.04.06 |
[SQL] 바로 조인 내부 조인 또는 어떻게하는 편에있는 테이블을 결정하기 위해 왼쪽 / 조인 사용할 때 어떻게 결정합니까? (0) | 2020.04.06 |