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


288

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

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

1
MySQL 코드 : select isnull(mycolumn) from mytablemycolumn이 null 인 경우 1을 반환합니다.
Eric

2
length (trim (mycolumn))> 0은 어떻습니까?
Cyril Jacquart

MSSQL> WHERE COLUMN <> ''또는 WHERE LEN (COLUMN)> 0 또는 NULLIF (LTRIM (RTRIM (COLUMN)), '')가 NULL이 아닌 경우
DxTx

답변:


445

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

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

7
조건을 WHERE some_col IS NULL OR some_col = ' '(문자열에 공백 하나 삽입)으로 변경하면 MySQL과 Oracle 모두에서 작동합니다. "onedaywhen"의 답변을 참조하십시오. some_col = ''빈 문자열은 NULL을 의미하므로 Oracle에서는 작동하지 않습니다.
Johanna

1
@Johanna 그러나로 전환하면 ' 'SQLite에서 작동하지 않습니다. 동일 / 직접 문자열 일치 만 처리합니다.
Magne

131

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;

6
채워진 공간을 언급 해 주셔서 감사합니다. 당신은 그것들의 이익을 얻고 조건을 WHERE some_col IS NULL OR some_col = ' '(문자열에 삽입 된 하나의 공백)으로 변경하면 MySQL과 Oracle 모두에서 작동합니다. some_col = ''빈 문자열은 NULL을 의미하고 완전한 조건은 NULL이되므로 Oracle에서는 작동하지 않습니다.
Johanna

내 요구 사항은 찾는 것이었다 SELECT * FROM T WHERE some_col IS NOT NULL OR same_col <> ' '; SELECT * FROM T WHERE NULLIF(some_col, ' ') IS NOT NULL;MySQL의에서 날 위해 일했습니다. 이것이 도움이 되길 바랍니다.
Dinuka Dayarathna

실제로 '' = ' 'SQLServer에서는 작동하지만 지금 테스트 할 수는 있지만 SQLite에서는 작동하지 않습니다.
Magne

66

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

WHERE some_col > ''

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


2
NULL 또는 빈 문자열 인 모든 레코드를 가져 와서 그 반대를 얻는 방법이 있습니까?
Joshua Pinter

14
@JoshPinter :coalesce(some_col, '') = ''
Andomar

6
이것은 언젠가는 사실 일 수도 있지만 MySQL 14.14에서는 작동하지 않습니다.
Gunnar Þór Magnússon

위대한 작품을 실제로 내가 MariaDB 모두 널 (null)와 빈 필드 필터링하는 방법을 알아낼 수있는 유일한 방법입니다
닐 데이비스

1
나는 some_col <>``을 사용하여 이것의 반대를 찾습니다
Chargnn

18

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 문서에서


2
실제 솔루션을 매우 복잡한 방식으로 제시합니다. 먼저 "mycol이 null 인"문제에 대한 불완전한 해결책을 제시합니다. 그런 다음 where 절에 두 개의 중첩 함수를 사용하여 솔루션을 제시하십시오. 그래야만 실제 솔루션을 얻을 수 있습니다. 앞으로는 실제 솔루션을 먼저 제시하십시오.

두 번째 예에서 부호 )앞에 a가 없음=
Rorrim

15

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

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

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

null이 있으면 왜 1을 반환합니까?
noobie-php

NULLIF는 fieldname에서 빈 값을 확인하고 비어 있으면 NULL로 변환합니다. NULLIF가 빈 필드를 성공적으로 빈 필드로 NULL로 변경했거나 이미 NULL 인 경우 ISNULL은 1 (true)을 리턴합니다. ,
nullif

9

어느 한 쪽

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

6

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

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

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


5

시험

SELECT 0 IS NULL ,  '' IS NULL , NULL IS NULL

-> 0, 0, 1

또는

SELECT ISNULL('  ') , ISNULL( NULL )
 -> 0 ,1

참고


5

이 문장은 훨씬 깨끗하고 읽기 쉽습니다.

select * from my_table where ISNULL(NULLIF(some_col, ''));

4

null or Empty내 프로젝트의 열 값을 확인하는 동안 다양한 데이터베이스에 약간의 지원 문제가 있음을 알았습니다.

모든 데이터베이스는 지원하지 않습니다 TRIM 방법.

아래는 다른 데이터베이스에서 지원되는 방법을 이해하기위한 매트릭스입니다.

SQL의 TRIM 함수는 문자열에서 지정된 접 두부 또는 접미 부를 제거하는 데 사용됩니다. 제거되는 가장 일반적인 패턴은 공백입니다. 이 기능은 데이터베이스마다 다르게 호출됩니다.

  • MySQL : TRIM(), RTRIM(), LTRIM()
  • 신탁: RTRIM(), LTRIM()
  • SQL 서버 : RTRIM(), LTRIM()

빈 / 널 확인 방법 :-

아래는 다른 데이터베이스에 따른 두 가지 다른 방법입니다.

이 트림 함수의 구문은 다음과 같습니다.

  1. 트림을 사용하여 확인

    SELECT FirstName FROM UserDetails WHERE TRIM(LastName) IS NULL

  2. LTRIM & RTRIM을 사용하여 확인

    SELECT FirstName FROM UserDetails WHERE LTRIM(RTRIM(LastName)) IS NULL

위의 두 가지 방법 모두 데이터베이스 지원에 따라 동일한 결과를 제공합니다. 비어있는 경우 FirstNamefrom UserDetails테이블을 반환합니다.LastName

희망이 당신을 도울 것입니다 :)


3

ORDER BY를 수행 할 때 NULL 값을 마지막에 표시하려면 다음을 시도하십시오.

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

3

당신은 또한 할 수 있습니다

SELECT * FROM table WHERE column_name LIKE ''

역 존재

SELECT * FROM table WHERE column_name NOT LIKE ''

분명히 작동하지 않습니다 : 적어도 MySQL에서는 select NULL like ''반환합니다 NULL.
Titus


1

null 확인

$column is null
isnull($column)

비어 있는지 확인

$column != ""

그러나 열에 항상 NOT NULL을 설정해야합니다
.mysql 최적화는 하나의 IS NULL 수준 만 처리 할 수 ​​있습니다.


3
NULL가치를 받아들이지 않는 것은 토론의 또 다른 주제입니다. 나는 당신의 추론을 제공하지 않고 그 권고를하는 것이 적절하다고 생각하지 않습니다.
maček

나는 참을성있게 포함시켰다. 또한이 질문과 마찬가지로 NULL을 사용하여 인생을 어렵게 만듭니다.
ajreal

5
그것은 끔찍한 추천입니다. INSERT 시점에 값을 알 수없는 열에 NOT NULL을 설정하면 -1and와 같은 비표준 "널"값을 사용하는 것이 좋습니다 ''.
Dan Bechard

@Dan


0

필자의 경우 데이터 가져 오기 중 열에 공간이 입력되었으며 길이가 1 인 빈 열처럼 보였으므로 먼저 빈 열의 길이를 확인한 length(column)다음이를 기반으로 검색 쿼리를 작성할 수 있습니다.

SELECT * FROM TABLE WHERE LENGHT (COLUMN) = 빈 열의 열 길이


-1

데이터 유형이 문자열이고 행이 null 인 경우 이것을 시도하십시오

SELECT * FROM table WHERE column_name IS NULL OR column_name = ''

데이터 유형이 int 또는 column 인 경우 0을 시도하십시오.

SELECT * FROM table WHERE column_name > = 0

-2
SELECT column_name FROM table_name WHERE column_name IN (NULL, '')

1
잘못된 답변. 이 선택되지 않습니다 NULL.
Pang
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.