서울땅콩의 취미생활

Mysql에서 공백과 NULL을 동시에 체크하는 방법이 있어서 정리하고자 한다.

MARIADB의 경우 컬럼값이 (NULL)인경우가 있고 아무 값이 없지만 공백인 경우가 있는데, 해당 컬럼을 조회하는경우 공백인경우 값이 존재하는것으로 판단되어져 애매한 상황이 발생하는 경우가 간혹 있다.

 

따라서 이부분을 쿼리로 한번에 해결하려고 한다.

여러가지 방법이 존재하겠으나 최근에 해결한 방법을 우선 정리하고자 한다.

 

NULLIF(컬럼명, '') IS NULL

 

위와같은 형태로 사용하는 것이다.

 

NULLIF함수를 사용하여 해당 컬럼의 값이 공백이라면 NULL로 치환하여, 해당 컬럼의 값이 NULL인지 여부를 체크하는 방법이다.

실제 아래와 같이 사용하였다.

SELECT * FROM TEST
WHERE 1 = 1
AND NULLIF(DATE, '') IS NOT NULL

DATE값이 공백인경우 NULL로 치환하여 NULL이 아닌것을 조회하도록 위와같이 처리하였고.

 

SELECT * FROM TEST
WHERE 1 = 1
AND NULLIF(DATE, '') IS NULL

DATE값이 공백인경우 NULL로 치환하여 NULL인것을 조회조건으로 걸도록 처리할 수 있다.

이렇게하면 공백과 NULL을 별도로 분리하여 체크하지 않고 한번에 깔끔하게 처리 가능하니 참고하면 되겠다.

 

NULLIF함수

NULLIF(expr1, expr2)

첫번째 인수와 두번째 인수를 비교하여 같으면 NULL, 값이 다르다면 첫번째 인수를 전달하게 된다.

 

예제

WITH TEST AS(
	SELECT '' AS DATE1
)
SELECT * FROM TEST
WHERE 1 = 1
AND NULLIF(DATE1, '') IS NOT NULL

 

 

위 예제의 결과처럼 공백값을 NULL로 변경하여 NOT NULL 체크를 조회조건으로 진행하므로 어떠한 데이타도 조회되지 않고 있다. 

 

그러나 아래의 경우는 다르다.

WITH TEST AS(
	SELECT '' AS DATE1
)
SELECT * FROM TEST
WHERE 1 = 1
AND DATE1 IS NOT NULL

 

 

조회조건을 DATE1 IS NOT NULL을 하였음에도 불구하고 공백으로 분류되어 데이타가 조회된다.

이러한 차이가 클라이언트에서 문제를 일으키기 때문에 잘 체크해야하겠다.

 

공유하기

facebook twitter kakaoTalk kakaostory naver band