2013-06-04 1 views
0

방금 ​​문제가 발생했습니다. MySQL 데이터베이스 :mySQL : if (condition, then, '')! = ''if (condition, then, 0)과 같지 않음! = 0

SELECT 
if(LENGTH(partner_id) > 38, SUBSTRING(partner_id FROM 8), 0) as sub_id 
from people 
Where 
if(LENGTH(partner_id) > 38, SUBSTRING(partner_id FROM 8), 0) != 0 

이것은 아직까지 특별한 것이 아니며 일부 partner_ids의 일부만 표시하려고합니다. 나는 약간 다른 같은 진술을 할 경우 하지만 (''빈 문자열로 0을 exhange) :

SELECT 
if(LENGTH(partner_id) > 38, SUBSTRING(partner_id FROM 8), '') as sub_id 
from people 
Where 
if(LENGTH(partner_id) > 38, SUBSTRING(partner_id FROM 8), '') != '' 

나는 방법이 더 결과를 얻을 수 있습니다. 유일한 차이점은 : else-statement에 빈 문자열을 넣고 빈 문자열을 비교합니다. SUBSTRING 함수의 이상한 동작입니까? 또는 나는 나무를 위해 나무를 그리워합니까?

+0

partner_ID에 어떤 값이 있습니까? –

+0

숫자와 해시 조합 – AUTxRemoteC

답변

1

하나의 설명은 부분 문자열이 0으로 시작하는 일부 파트너 ID가 있다는 것입니다.

첫 번째 경우 쿼리는 정수 비교를 수행합니다. '0a'와 같은 문자열은 정수로 '0'으로 평가됩니다. 이것은 0과 같기 때문에 필터링됩니다.

두 번째 경우에는 쿼리가 문자열 비교를 수행하고 있습니다. '0a'와 같은 문자열은 ''와 다르므로 필터링 절을 전달합니다.

+1

소리가 이와 같아야합니다. 다음은 시연하는 SQL 바이올린입니다 : http://sqlfiddle.com/#!9/16b74/1/0 –

+0

나는 이것이 문제라고 생각합니다. 당신이 그것에 대해 생각한다면 꽤 간단하지만 0a = 0은 정수와 문자열 비교의 차이 때문에 알 수 있습니다. 그래서 내 결론은 문자열 비교가 정수 비교보다 훨씬 강력하다는 것입니다. – AUTxRemoteC