복붙노트

[SQL] 열이 비어 있지 않은 위치를 선택 MYSQL

SQL

열이 비어 있지 않은 위치를 선택 MYSQL

MySQL을, 나는 무언가가 존재할 경우에만 열을 선택할 수 있습니까?

예를 들어, 나는 다음과 같은 쿼리를 가지고 :

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

나는 전화가 813로 시작하고 phone2가 뭔가를 가지고 곳에서만 행을 선택하기 위해 노력하고있어.

해결법

  1. ==============================

    1.빈 문자열 phone2의 값을 비교 :

    빈 문자열 phone2의 값을 비교 :

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

    그 NULL 값이 거짓으로 해석됩니다.

  2. ==============================

    2.필드가 NULL 사용 있는지 확인하려면, NULL IS NULL 연산자를지지 않습니다.

    필드가 NULL 사용 있는지 확인하려면, NULL IS NULL 연산자를지지 않습니다.

    MySQL을 참조 http://dev.mysql.com/doc/refman/5.0/en/working-with-null.html

  3. ==============================

    3.NULL과 빈 문자열 값을 확인합니다 :

    NULL과 빈 문자열 값을 확인합니다 :

    select phone
    , phone2 
    from users 
    where phone like '813%' 
    and trim(coalesce(phone2, '')) <>''
    

    N.B. 나는 ISNULL ()가없는 반면, COALESCE는 (), SQL 표준 (-ish)라고 생각합니다.

  4. ==============================

    4.나는 그 (이 후 근무 한 적이없는 수 있도록,이 질문은 매우 오래된) 난 이미 여기 보지 않았다 아주 잘 나를 위해 노력 해왔다 사용하고 있다는 답변은 실제로

    나는 그 (이 후 근무 한 적이없는 수 있도록,이 질문은 매우 오래된) 난 이미 여기 보지 않았다 아주 잘 나를 위해 노력 해왔다 사용하고 있다는 답변은 실제로

    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
    

    업데이트하려면 내가 기대하지 않았다 이것에주의해야하지만, 제로 또는 아래의 빈 문자열보다 큰 숫자 값이 있습니다 그래서 만약 당신이 다음이 작업을 수행하지 제로 또는 음수가 될 수있는 숫자 나왔습니다 거래, 아주 최근에 저 비트 및 디버깅하기가 매우 어렵습니다 :(

    당신이 문자열 (CHAR, VARCHAR, 텍스트 등)을 사용하는 경우, 다음이 될 완벽하게, 잘 될 것입니다 단지 수치에주의.

  5. ==============================

    5.공간이 실수로 데이터 입력에서 전화 (2) 필드에있는 경우, 당신은 IFNULL 및 TRIM 기능을 가진 레코드를 무시할 수 있습니다 :

    공간이 실수로 데이터 입력에서 전화 (2) 필드에있는 경우, 당신은 IFNULL 및 TRIM 기능을 가진 레코드를 무시할 수 있습니다 :

    SELECT phone, phone2
    FROM jewishyellow.users
    WHERE phone LIKE '813%'
        AND TRIM(IFNULL(phone2,'')) <> '';
    
  6. ==============================

    6.

    select phone, phone2 from jewishyellow.users 
    where phone like '813%' and phone2 is not null
    
  7. ==============================

    7.

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

    기본 값이 무엇인지에 따라 약간의 tweakage을해야 할 수도 있습니다. 당신이 널 칠 수 있다면, 당신은 분명히 더 나은 대신 "하지 NULL을"할 수 있습니다.

  8. ==============================

    8.우리는 어떤 문자 또는 문자열에 빈 값을 설정하는 CASE를 사용할 수 있습니다. 나는 기본 문자열로 NA를 사용하고 있습니다.

    우리는 어떤 문자 또는 문자열에 빈 값을 설정하는 CASE를 사용할 수 있습니다. 나는 기본 문자열로 NA를 사용하고 있습니다.

    SELECT phone,   
    CASE WHEN phone2 = '' THEN 'NA' END AS phone2 ELSE ISNULL(phone2,0) 
    FROM jewishyellow.users  WHERE phone LIKE '813%'
    
  9. ==============================

    9.또 다른 방법은 열 값의 CHAR_LENGTH 구체적으로 보일 것이다. (LENGTH와 혼동하지 말 것)

    또 다른 방법은 열 값의 CHAR_LENGTH 구체적으로 보일 것이다. (LENGTH와 혼동하지 말 것)

    이러한 NULL 또는 0의 값을 갖는 정수 컬럼의 경우와 열 값 falsey 될 수 가양 성을 피할 문자 길이가 0보다 더 큰 기준을 사용. 데이터 유형의 변화를 통해 더 일관성있게 행동.

    어떤 길이 최소 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 다를는 NULL AND phone2 <> ""기대되지 NOT IS

    users
    813-123-4567       | 1
    813-123-4567       | 0
    
    users2
    813-123-4567       | 1
    813-123-4567       | 0
    

    phone2는 NOT NULL AND phone2 <> ""결과 (다른) IS

    users
    813-123-4567       | 1
    
    users2
    813-123-4567       | 1
    813-123-4567       | 0
    
  10. ==============================

    10.사용하다:

    사용하다:

    SELECT t.phone, 
           t.phone2 
      FROM jewishyellow.users t
     WHERE t.phone LIKE '813%' 
       AND t.phone2 IS NOT NULL
    
  11. ==============================

    11.당신이 이것을 달성하기 위해 운영자 와일드 카드처럼 사용할 수 있습니다 :

    당신이 이것을 달성하기 위해 운영자 와일드 카드처럼 사용할 수 있습니다 :

    SELECT t.phone, 
           t.phone2 
    FROM jewishyellow.users t
    WHERE t.phone LIKE '813%' 
      AND t.phone2 like '[0-9]';
    

    이러한 방법으로, 당신은 번호 접두사가있는 모든 phone2을 얻을 수 있습니다.

  12. ==============================

    12.내 경우에는 내가 VARCHAR 열, 모두 및! = ''일하지 않았다 IS NOT NULL의 방법을했다,하지만 나를 위해 일한 다음. 그냥 여기를 알리.

    내 경우에는 내가 VARCHAR 열, 모두 및! = ''일하지 않았다 IS NOT NULL의 방법을했다,하지만 나를 위해 일한 다음. 그냥 여기를 알리.

    SELECT * FROM `db_name` WHERE `column_name` LIKE '%*%'
    
  13. ==============================

    13.놀랍게도 (같은 아무도 다른 전에 그것을 언급하지 않음) 조건 아래 일을 발견 :

    놀랍게도 (같은 아무도 다른 전에 그것을 언급하지 않음) 조건 아래 일을 발견 :

    WHERE ORD(field_to_check) > 0 
    

    우리는 널 (null) 빈 값을 모두 제외해야 할 때. 사람이 접근 방식의 단점을 알고 있습니까?

  14. from https://stackoverflow.com/questions/1869264/mysql-select-where-column-is-not-empty by cc-by-sa and MIT license