null 또는 빈 값을 포함 할 수있는 열이 테이블에 있습니다. 테이블에있는 행에서 열이 비어 있는지 또는 null인지 어떻게 확인합니까?
(e.g. null or '' or ' ' or ' ' and ...)
null 또는 빈 값을 포함 할 수있는 열이 테이블에 있습니다. 테이블에있는 행에서 열이 비어 있는지 또는 null인지 어떻게 확인합니까?
(e.g. null or '' or ' ' or ' ' and ...)
답변:
곳은 모든 행을 선택할 것 some_col
입니다 NULL
또는 ''
(빈 문자열)
SELECT * FROM table WHERE some_col IS NULL OR some_col = '';
WHERE some_col IS NULL OR some_col = ' '
(문자열에 공백 하나 삽입)으로 변경하면 MySQL과 Oracle 모두에서 작동합니다. "onedaywhen"의 답변을 참조하십시오. some_col = ''
빈 문자열은 NULL을 의미하므로 Oracle에서는 작동하지 않습니다.
' '
SQLite에서 작동하지 않습니다. 동일 / 직접 문자열 일치 만 처리합니다.
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 IS NULL OR some_col = ' '
(문자열에 삽입 된 하나의 공백)으로 변경하면 MySQL과 Oracle 모두에서 작동합니다. some_col = ''
빈 문자열은 NULL을 의미하고 완전한 조건은 NULL이되므로 Oracle에서는 작동하지 않습니다.
SELECT * FROM T WHERE some_col IS NOT NULL OR same_col <> ' ';
과 SELECT * FROM T WHERE NULLIF(some_col, ' ') IS NOT NULL;
MySQL의에서 날 위해 일했습니다. 이것이 도움이 되길 바랍니다.
'' = ' '
SQLServer에서는 작동하지만 지금 테스트 할 수는 있지만 SQLite에서는 작동하지 않습니다.
조건을 작성하는 더 짧은 방법 :
WHERE some_col > ''
이후 null > ''
생산 unknown
이 모두 필터링의 효과가 null
빈 문자열을.
coalesce(some_col, '') = ''
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 COALESCE 및 IS NULL 을 참조하십시오.
또한 널 (null) 값 작업 은 MySQL 문서에서
)
앞에 a가 없음=
어디에없는 또 다른 방법은 이것을 시도하십시오.
빈 값과 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 or Empty
내 프로젝트의 열 값을 확인하는 동안 다양한 데이터베이스에 약간의 지원 문제가 있음을 알았습니다.
모든 데이터베이스는 지원하지 않습니다 TRIM
방법.
아래는 다른 데이터베이스에서 지원되는 방법을 이해하기위한 매트릭스입니다.
SQL의 TRIM 함수는 문자열에서 지정된 접 두부 또는 접미 부를 제거하는 데 사용됩니다. 제거되는 가장 일반적인 패턴은 공백입니다. 이 기능은 데이터베이스마다 다르게 호출됩니다.
TRIM(), RTRIM(), LTRIM()
RTRIM(), LTRIM()
RTRIM(), LTRIM()
빈 / 널 확인 방법 :-
아래는 다른 데이터베이스에 따른 두 가지 다른 방법입니다.
이 트림 함수의 구문은 다음과 같습니다.
트림을 사용하여 확인
SELECT FirstName FROM UserDetails WHERE TRIM(LastName) IS NULL
LTRIM & RTRIM을 사용하여 확인
SELECT FirstName FROM UserDetails WHERE LTRIM(RTRIM(LastName)) IS NULL
위의 두 가지 방법 모두 데이터베이스 지원에 따라 동일한 결과를 제공합니다. 비어있는 경우 FirstName
from UserDetails
테이블을 반환합니다.LastName
희망이 당신을 도울 것입니다 :)
null 확인
$column is null
isnull($column)
비어 있는지 확인
$column != ""
그러나 열에 항상 NOT NULL을 설정해야합니다
.mysql 최적화는 하나의 IS NULL 수준 만 처리 할 수 있습니다.
NULL
가치를 받아들이지 않는 것은 토론의 또 다른 주제입니다. 나는 당신의 추론을 제공하지 않고 그 권고를하는 것이 적절하다고 생각하지 않습니다.
-1
and와 같은 비표준 "널"값을 사용하는 것이 좋습니다 ''
.
select * from table where length(RTRIM(LTRIM(column_name))) > 0
RTRIM
과는 LTRIM
아니지만 TRIM
?
select isnull(mycolumn) from mytable
mycolumn이 null 인 경우 1을 반환합니다.