[sql] MySQL은 열이 비어 있지 않은 곳을 선택하십시오.

MySQL에서 무언가 존재하는 열만 선택할 수 있습니까?

예를 들어 다음과 같은 쿼리가 있습니다.

select phone, phone2
from jewishyellow.users
where phone like '813%'
and phone2

phone이 813으로 시작하고 phone2에 무언가가있는 행만 선택하려고합니다.



답변

phone2빈 문자열과 값을 비교하십시오 .

select phone, phone2
from jewishyellow.users
where phone like '813%' and phone2<>''

참고 NULL로 해석됩니다 값을 false.


답변

필드가 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


답변

SELECT phone, phone2
FROM jewishyellow.users
WHERE phone like '813%' and (phone2 <> "");

기본값에 따라 약간의 조정이 필요할 수 있습니다. 널 (Null) 채우기를 허용 한 경우 대신 “NULL이 아님”을 수행 할 수 있습니다.