[SQL] 가장 좋은 방법은 "비어 있거나 null 값"을 확인합니다
SQL가장 좋은 방법은 "비어 있거나 null 값"을 확인합니다
값이 null 또는 빈 문자열 포스트 그레스 SQL 문에 있는지 확인하는 가장 좋은 방법은 무엇입니까?
체크 한 번만 작성하는 것이 바람직하다 그래서 값은 긴 표현이 될 수 있습니다.
현재 내가 사용하고 있습니다 :
coalesce( trim(stringexpression),'')=''
그러나 조금 추한 보인다.
stringexpression 숯불 (n)이 열 또는 문자 표현 (N)를 함유하는 후단 공백 열 수있다.
가장 좋은 방법은 무엇입니까?
해결법
-
==============================
1.발현 stringexpression = '수율 :
발현 stringexpression = '수율 :
TRUE위한 .. '(또는 데이터 타입 문자 만 공백으로 구성된 문자열에 대한 (N)) NULL .. NULL을위한 무엇을위한 .. FALSE
"stringexpression이 NULL이거나 비어 있습니다"이처럼 확인합니다 :
(stringexpression = '') IS NOT FALSE
또는 역 접근 방식은 (쉽게 읽을 수 있습니다) :
(stringexpression <> '') IS NOT TRUE
좀처럼 유용 쓸모 CHAR (n)를 포함한 모든 문자 유형에 대한 작품. 이 매뉴얼에 대한 비교 연산자.
또는 (아래 참조) 단지 CHAR (n)에 대한 쓸모가있을 것 트림 ()하지 않고, 당신이 이미 가지고 표현을 사용하거나 다른 문자 유형에 대한 테스트 만 공간으로 구성된 문자열을 포함 할 것입니다 :
coalesce(stringexpression, '') = ''
그러나 상단에있는 표현은 빠릅니다.
반대 주장 : "stringexpression가 null와 하늘이 어느 쪽도 아닌"도 간단하다 :
stringexpression <> ''
모든 유용한 데이터 유형의 다른 문자 VARCHAR 같은 유형 (N), VARCHAR, 텍스트 또는 (따옴표) "문자",이 데이터 유형을 혼동하지 마십시오. 짧게, 문자 (N) : 문자 (N)이 매우 제한된 유용성과 오래된 데이터 타입에 관한 것이다. 또한, 문자와 문자는 문자 (1) / 문자 (1) (같은 것)의 약자입니다.
CHAR (N)에서 (다른 문자열 유형과 달리!) 빈 문자열은 공백 만 구성된 다른 문자열에서 다르지 않다. 이러한 모든 유형의 정의에 따라 문자 (N)의 N 개의 공간으로 접혀있다. 그것은 논리적으로 다음 그뿐만 아니라 CHAR (n)의이 작품 :
coalesce(stringexpression, '') = ''
다만 이러한 많은 (어떤 다른 문자 유형없는 일 것)
coalesce(stringexpression, ' ') = ' ' coalesce(stringexpression, '') = ' '
CHAR (n)에 캐스팅 할 때 빈 문자열은 공백 문자열과 같다 :
SELECT ''::char(5) = ''::char(5) AS eq1 ,''::char(5) = ' '::char(5) AS eq2 ,''::char(5) = ' '::char(5) AS eq3;
CHAR (N)와 "null 또는 빈 문자열"에 대한 시험 :
SELECT stringexpression ,stringexpression = '' AS simple_test ,(stringexpression = '') IS NOT FALSE AS test1 ,(stringexpression <> '') IS NOT TRUE AS test2 ,coalesce(stringexpression, '') = '' AS test_coalesce1 ,coalesce(stringexpression, ' ') = ' ' AS test_coalesce2 ,coalesce(stringexpression, '') = ' ' AS test_coalesce3 FROM ( VALUES ('foo'::char(5)) , ('') , (NULL) , (' ') -- not different from '' in char(n) ) sub(stringexpression);
텍스트 "null 또는 빈 문자열"에 대한 테스트
SELECT stringexpression ,stringexpression = '' AS simple_test ,(stringexpression = '') IS NOT FALSE AS test1 ,(stringexpression <> '') IS NOT TRUE AS test2 ,coalesce(stringexpression, '') = '' AS test_coalesce1 ,coalesce(stringexpression, ' ') = ' ' AS test_coalesce2 ,coalesce(stringexpression, '') = ' ' AS test_coalesce3 FROM ( VALUES ('foo'::text) , ('') , (NULL) , (' ') -- different from '' in a sane character type like text ) sub(stringexpression);
여기 dbfiddle 올드 SQL 바이올린
관련 :
-
==============================
2.널 (null) 및 비어를 확인하려면 :
널 (null) 및 비어를 확인하려면 :
coalesce(string, '') = ''
널 (null)를 확인하려면 비우고 공간 (문자열을 트림)
coalesce(TRIM(string), '') = ''
-
==============================
3.문자열도 작동하고 컴팩트의 길이에 대한 확인 :
문자열도 작동하고 컴팩트의 길이에 대한 확인 :
where length(stringexpression) > 0;
-
==============================
4.빈 후행 공백이있을 수 있다면, 아마 더 나은 솔루션이있다. COALESCE는 당신 같은 문제입니다.
빈 후행 공백이있을 수 있다면, 아마 더 나은 솔루션이있다. COALESCE는 당신 같은 문제입니다.
-
==============================
5.I 톱 사람들이 사용하는 것이 뭔가 stringexpression> ''입니다. 이없는 가장 빠른 하나가 될 수 있지만, 가장 짧은 중 하나가 될 일이있다.
I 톱 사람들이 사용하는 것이 뭔가 stringexpression> ''입니다. 이없는 가장 빠른 하나가 될 수 있지만, 가장 짧은 중 하나가 될 일이있다.
MS SQL뿐 아니라 PostgreSQL을에 그것을 시도.
-
==============================
6.널 (NULL) 필드를 비교하는 내 preffered 방법입니다 : NULLIF (nullablefield :가 parameterValue)이 NULL AND NULLIF IS (:가 parameterValue, nullablefield)는 NULL이다. 이것은 복잡하지만 합체는 어떤 경우에는 불가능하지만 보편적 인 사용이다.
널 (NULL) 필드를 비교하는 내 preffered 방법입니다 : NULLIF (nullablefield :가 parameterValue)이 NULL AND NULLIF IS (:가 parameterValue, nullablefield)는 NULL이다. 이것은 복잡하지만 합체는 어떤 경우에는 불가능하지만 보편적 인 사용이다.
"NULL이다 NULLIF (가 parameterValue nullablefield가)"첫 번째 파라미터가 NULL 인 경우 항상 "참"을 반환하므로 NULLIF 두번째 및 역 사용하는 것이다.
-
==============================
7.데이터베이스 레코드의 수가 많은 경우는 null 검사 시간이 더 걸릴 수 있습니다 당신과 같은 다른 방법으로 확인 NULL을 사용할 수 있습니다 : 1) 여기서, 기둥 이름은 널 2)하지 존재하는 () 기둥 이름은 널 해당 단부 후 3) WHERE (케이스)
데이터베이스 레코드의 수가 많은 경우는 null 검사 시간이 더 걸릴 수 있습니다 당신과 같은 다른 방법으로 확인 NULL을 사용할 수 있습니다 : 1) 여기서, 기둥 이름은 널 2)하지 존재하는 () 기둥 이름은 널 해당 단부 후 3) WHERE (케이스)
-
==============================
8.또 다른 방법은
또 다른 방법은
nullif(trim(stringExpression),'') is not null
-
==============================
9.답변의 많은 가장 짧은 방법이 아닌 반드시 열이 널 (null)이 많이있는 경우 가장 좋은 방법입니다. 검사를 깨고 옵티마이 빨리 다른 조건으로 일을 할 필요가 없기 때문에 검사를 평가할 수 있습니다.
답변의 많은 가장 짧은 방법이 아닌 반드시 열이 널 (null)이 많이있는 경우 가장 좋은 방법입니다. 검사를 깨고 옵티마이 빨리 다른 조건으로 일을 할 필요가 없기 때문에 검사를 평가할 수 있습니다.
(stringexpression IS NOT NULL AND trim(stringexpression) != '')
문자열 비교는 첫 번째 조건이 거짓이기 때문에 평가를 할 필요가 없습니다.
from https://stackoverflow.com/questions/23766084/best-way-to-check-for-empty-or-null-value by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 왜 사람들이 너무 많은 SQL 커서를 싫어합니까? [닫은] (0) | 2020.04.05 |
---|---|
[SQL] 어떻게 SELECT INTO OUTFILE와 MySQL을 errcode를 13 주위를받을 수 있나요? (0) | 2020.04.05 |
[SQL] 진수 컬럼에 돈을 저장 - 어떤 정밀도와 스케일? (0) | 2020.04.05 |
[SQL] 차세대 데이터베이스 [폐쇄] (0) | 2020.04.05 |
[SQL] 자연의 차이 가입 및 내부 조인 (0) | 2020.04.05 |