2012-11-02 6 views
2

동료로부터 일부 코드를 상속 받았고 일부 코드가 일치하지 않는 것으로 나타났습니다 예를 들어,SQL 차이 = 0, = '0', IN (0), IN ('0')

sum(case when (elephants = 0)then 1 else 0 end), 

sum(case when (elephants = '0')then 1 else 0 end), 

sum(case when (elephants IN (0))then 1 else 0 end), 

sum(case when (elephants IN ('0'))then 1 else 0 end); 

단일 qutoes을 사용 또는 대 = 단일 값을 찾을 때, 어떤 다른 이유는 별거 아닌 (그것을 설명 할 수 사이의 기능적 차이가없는 경우 다음 사이의 기능적 차이 THER입니다 암호)?

+0

DBMS를 무엇입니까? 그렇지 않으면이 모든 것이 똑같은 일을합니다. – Kermit

답변

3

x IN (a, b, c)x = a OR x = b OR x = c을 의미합니다. IN 목록에 단일 항목이 포함되어있는 경우 x IN (a)x = a을 의미합니다.

0'0'의 차이는 전자는 정수이고, 후자는 문자열입니다. 후자는 정수로 변환 될 수 있으므로 elephants도 정수인 경우 elephants = 0elephants = '0'도 동일한 것을 테스트합니다.

네 가지간에 실제 차이점은 없습니다. 한마디로

+0

고마워, 그게 많이 도움이된다. –

1

=은 단일 값이지만 IN복수 값을 가질 수 있습니다.

예를 =

a = b 

뿐만 IN를 들어 여러 OR

a = 1 OR a = 2 or a = 3 

를 작성하는 경우, 작은 따옴표에 대한

a IN (1,2,3) 

로 쓸 수 열의 데이터의 경우 유형은 숫자이며 서버는 자동으로 문자열 값을 숫자 값으로 파싱합니다.

1

:

= 0 //equal to the number zero 
= '0' //equal to the string "0" 
IN (0) //appears in the list in parenthesis. In this case, the single-item list of numerical zero 
IN ('0') //appears in the list in parenthesis. In this case, the single-item list of string "0"