[mysql] MySQL에서 열이 비어 있는지 또는 null인지 어떻게 확인합니까?

null 또는 빈 값을 포함 할 수있는 열이 테이블에 있습니다. 테이블에있는 행에서 열이 비어 있는지 또는 null인지 어떻게 확인합니까?

(e.g. null or '' or '  ' or '      ' and ...)



답변

곳은 모든 행을 선택할 것 some_col입니다 NULL또는 ''(빈 문자열)

SELECT * FROM table WHERE some_col IS NULL OR some_col = '';


답변

SQL-92 표준에 정의 된대로 너비가 다른 두 문자열을 비교할 때 더 좁은 값은 공백으로 오른쪽에 채워져 더 넓은 값과 같은 너비가됩니다. 따라서 공백 (제로 공백 포함)으로 구성된 모든 문자열 값은 다음과 같은 것으로 간주됩니다.

'' = ' ' IS TRUE
'' = '  ' IS TRUE
' ' = '  ' IS TRUE
'  ' = '      ' IS TRUE
etc

따라서이 some_col값 을 구성하는 공간 수에 관계없이 작동해야 합니다.

SELECT *
  FROM T
 WHERE some_col IS NULL
       OR some_col = ' ';

간결하게 :

SELECT *
  FROM T
 WHERE NULLIF(some_col, ' ') IS NULL;


답변

조건을 작성하는 더 짧은 방법 :

WHERE some_col > ''

이후 null > ''생산 unknown이 모두 필터링의 효과가 null빈 문자열을.


답변

WHERE col IS NULL또는 WHERE col IS NOT NULL예를 들어 열이 null인지 또는 null이 아닌지 테스트 할 수 있습니다.

SELECT myCol
FROM MyTable
WHERE MyCol IS NULL 

귀하의 예에서 공백의 다양한 순열이 있습니다. 공백을 사용하여 제거 하고 NULL 값을 기본값으로 설정하는 데 TRIM사용할 수 있습니다 COALESCE(COALESCE는 사용자가 suppy 한 값에서 널이 아닌 첫 번째 값을 리턴 함).

예 :

SELECT myCol
FROM MyTable
WHERE TRIM(COALESCE(MyCol, '') = '' 

이 최종 쿼리 MyCol는 null이거나 길이가 공백 인 행을 반환합니다 .

피할 수 있으면 WHERE 절의 열에 함수를 사용하지 않는 것이 좋습니다. 인덱스를 사용하기가 어렵 기 때문입니다. 열이 null인지 비어 있는지 확인하려는 경우 다음을 수행하는 것이 좋습니다.

SELECT myCol
FROM MyTable
WHERE MyCol IS NULL OR MyCol =  '' 

자세한 정보 TRIM COALESCEIS NULL 을 참조하십시오.

또한 널 (null) 값 작업 은 MySQL 문서에서


답변

어디에없는 또 다른 방법은 이것을 시도하십시오.

빈 값과 NULL 값을 모두 선택합니다

SELECT ISNULL(NULLIF(fieldname,''))  FROM tablename


답변

어느 한 쪽

SELECT IF(field1 IS NULL or field1 = '', 'empty', field1) as field1 from tablename

또는

SELECT case when field1 IS NULL or field1 = ''
        then 'empty'
        else field1
   end as field1 from tablename


답변

데이터베이스에서 지저분한 필드가 싫습니다. 열이 빈 문자열이거나 null 인 경우 매번 select를 수행하기 전에 다음과 같이 수정하십시오.

UPDATE MyTable SET MyColumn=NULL WHERE MyColumn='';
SELECT * FROM MyTable WHERE MyColumn IS NULL

어떤 이유로 든 NULL과 빈을 구분할 필요가없는 한 데이터를 깔끔하게 유지합니다.