답변:
phone2
빈 문자열과 값을 비교하십시오 .
select phone, phone2
from jewishyellow.users
where phone like '813%' and phone2<>''
참고 NULL
로 해석됩니다 값을 false
.
phone2<>""
SQL 구문 검사기를 지나치지 않습니다.
필드가 NULL 사용하는 경우 확인하려면 IS NULL
, IS NOT NULL
연산자.
MySql 참조 http://dev.mysql.com/doc/refman/5.0/en/working-with-null.html
NULL
문자열 값을 확인 하고 비 웁니다.
select phone
, phone2
from users
where phone like '813%'
and trim(coalesce(phone2, '')) <>''
NB COALESCE ()는 SQL 표준 (-ish)이지만 ISNULL ()은 그렇지 않다고 생각합니다.
내가 사용하고있는 대답은 이미 여기에서 보지 못했던 꽤 잘 작동했습니다 (이 질문은 매우 오래되었으므로 작동하지 않았을 수 있음).
SELECT t.phone,
t.phone2
FROM jewishyellow.users t
WHERE t.phone LIKE '813%'
AND t.phone2 > ''
> ''
값이 null이 아니고 값이 공백이나 공백이 아닌지 확인 하는 부분을 확인하십시오.
기본적으로 필드에 공백 또는 이외의 다른 항목이 NULL
있으면 사실입니다. 또한 매우 짧기 때문에 작성하기 쉽고 함수 COALESCE()
및 IFNULL()
함수의 또 다른 장점 은 필드의 함수 출력을 다른 것과 비교하지 않기 때문에 인덱스 친화적이라는 것입니다.
테스트 사례 :
SELECT if(NULL > '','true','false');-- false
SELECT if('' > '','true','false');-- false
SELECT if(' ' > '','true','false');-- false
SELECT if('\n' > '','true','false');-- false
SELECT if('\t' > '','true','false');-- false
SELECT if('Yeet' > '','true','false');-- true
UPDATE 내가 기대하지 않았다 이것에주의해야하지만, 제로 또는 아래에있는 숫자 값이 없는 빈 문자열보다 큰, 그래서 만약 당신이 다음이 작업을 수행하지 제로 또는 음수가 될 수있는 숫자 나왔습니다 거래 , 그것은 최근에 나를 물었고 디버깅하기가 매우 어려웠습니다.
문자열 (char, varchar, text 등)을 사용하는 경우 숫자에주의하면 완벽하게 괜찮습니다.
phone2 필드에 부주의 한 데이터 입력에서 공백이 있으면 IFNULL 및 TRIM 함수를 사용하여 해당 레코드를 무시할 수 있습니다.
SELECT phone, phone2
FROM jewishyellow.users
WHERE phone LIKE '813%'
AND TRIM(IFNULL(phone2,'')) <> '';
select phone, phone2 from jewishyellow.users
where phone like '813%' and phone2 is not null
NULL
값과 빈 문자열 입니다 값. 빈 문자열을 확인 하려면 다른 답변에서 제안한대로 사용 하십시오. ''
column <> ''
SELECT phone, phone2
FROM jewishyellow.users
WHERE phone like '813%' and (phone2 <> "");
기본값에 따라 약간의 조정이 필요할 수 있습니다. 널 (Null) 채우기를 허용 한 경우 대신 "NULL이 아님"을 수행 할 수 있습니다.
NOT()
MySQL 에는 기능 이 없습니다. 2) phone2=""
SQL 구문 검사기를 지나치지 않습니다.
다른 대안은 CHAR_LENGTH
열 값을 구체적으로 보는 것 입니다. (와 혼동하지 말 것 LENGTH
)
이러한 값을 갖는 정수 컬럼의 경우에서와 같이 열 값 falsey 될 때 가양 피할 문자 길이가 0보다 더 큰 기준을 사용 0
하거나NULL
. 다양한 데이터 유형에서보다 일관되게 작동합니다.
결과적으로 1 자 이상이거나 비어 있지 않은 값이 발생합니다.
SELECT phone, phone2
FROM users
WHERE phone LIKE '813%'
AND CHAR_LENGTH(phone2) > 0
테이블 데이터
users
phone (varchar 12) | phone2 (int 10)
"813-123-4567" | NULL
"813-123-4567" | 1
"813-123-4567" | 0
users2
phone (varchar 12) | phone2 (varchar 12)
"813-123-4567" | NULL
"813-123-4567" | "1"
"813-123-4567" | "0"
"813-123-4567" | ""
CHAR_LENGTH(phone2) > 0
결과 (동일)
users
813-123-4567 | 1
813-123-4567 | 0
users2
813-123-4567 | 1
813-123-4567 | 0
대안
phone2 <> ''
결과 (다른)
users
813-123-4567 | 1
users2
813-123-4567 | 1
813-123-4567 | 0
phone2 > ''
결과 (다른)
users
813-123-4567 | 1
users2
813-123-4567 | 1
813-123-4567 | 0
COALESCE(phone2, '') <> ''
결과 (동일)
참고 : phone2 IS NOT NULL AND phone2 <> ''
예상 과 다른 결과
users
813-123-4567 | 1
813-123-4567 | 0
users2
813-123-4567 | 1
813-123-4567 | 0
phone2 IS NOT NULL AND phone2 <> ''
결과 (다른)
users
813-123-4567 | 1
users2
813-123-4567 | 1
813-123-4567 | 0
내 경우에는 varchar 열이 있었고 IS NOT NULL
&의 두 가지 방법이 모두 != ''
작동하지 않았지만 다음은 저에게 효과적 이었습니다. 그냥 여기에 넣어
SELECT * FROM `db_name` WHERE `column_name` LIKE '%*%'
phone2
뭔가가있다 " 는 말의 의미를 명확히 할 수 있습니까 ? 사람들은 당신이phone2
NULL이 아니거나, 공백이 아니며, 공백이 아닌지 등을 추측하고 있습니다 .