Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 빈 문자열을 NULL로 변환하는 방법 – NULLIF() 함수 완벽 가이드

MySQL에서 빈 문자열을 NULL로 변환하는 방법

MySQL에서는 NULLIF() 함수를 사용하여 빈 문자열('')을 NULL로 손쉽게 변환할 수 있습니다. 데이터 정제 작업이나 데이터 분석 시 빈 문자열과 NULL을 구분해야 하는 경우 이 방법이 특히 유용합니다.

NULLIF() 함수 기본 문법

SELECT NULLIF(컬럼명, '') AS 별칭 FROM 테이블명;

NULLIF(expr1, expr2) 함수는 두 인자가 서로 같으면 NULL을 반환하고, 다르면 첫 번째 인자의 값을 그대로 반환합니다.

즉, 위 문법에서 컬럼 값이 빈 문자열('')과 일치하면 결과는 항상 NULL이 됩니다. 반대로 컬럼 값이 이미 NULL인 경우에도 비교 결과가 성립하지 않으므로 역시 NULL이 유지됩니다. 덕분에 기존의 NULL 값에는 영향을 주지 않고 오직 빈 문자열만 NULL로 바꿀 수 있습니다.

예제 테이블 생성하기

실제 동작을 확인하기 위해 먼저 테스트용 테이블을 생성해 보겠습니다.

mysql> create table ConvertEmptyStringToNULL
    -> (
    -> Id int NOT NULL AUTO_INCREMENT,
    -> Name varchar(20),
    -> PRIMARY KEY(Id)
    -> );
Query OK, 0 rows affected (0.63 sec)

테이블 생성 후, INSERT 명령으로 샘플 데이터를 입력합니다. 여기서는 일반 문자열, 빈 문자열, NULL 값을 의도적으로 섞어서 삽입했습니다.

mysql> insert into ConvertEmptyStringToNULL(Name) values('John');
Query OK, 1 row affected (0.22 sec)
mysql> insert into ConvertEmptyStringToNULL(Name) values('');
Query OK, 1 row affected (0.15 sec)
mysql> insert into ConvertEmptyStringToNULL(Name) values(NULL);
Query OK, 1 row affected (0.14 sec)
mysql> insert into ConvertEmptyStringToNULL(Name) values('');
Query OK, 1 row affected (0.21 sec)
mysql> insert into ConvertEmptyStringToNULL(Name) values('Carol');
Query OK, 1 row affected (0.13 sec)
mysql> insert into ConvertEmptyStringToNULL(Name) values(NULL);
Query OK, 1 row affected (0.70 sec)

저장된 데이터 확인하기

SELECT 문으로 테이블의 전체 레코드를 조회합니다.

mysql> select *from ConvertEmptyStringToNULL;

실행 결과는 아래와 같습니다. Id 2와 4는 빈 문자열이며, Id 3과 6은 NULL 값입니다.

+----+-------+
| Id | Name  |
+----+-------+
|  1 | John  |
|  2 |       |
|  3 | NULL  |
|  4 |       |
|  5 | Carol |
|  6 | NULL  |
+----+-------+
6 rows in set (0.00 sec)

빈 문자열을 NULL로 변환하는 쿼리 실행

이제 NULLIF() 함수를 적용하여 빈 문자열을 NULL로 변환해 보겠습니다.

mysql> select NULLIF(Name,'') as EmptyStringNULL from ConvertEmptyStringToNULL;

아래 출력 결과에서 볼 수 있듯이, 원래 빈 문자열이던 값들이 모두 NULL로 표시됩니다. 기존의 NULL 값도 그대로 NULL로 유지되는 것을 확인할 수 있습니다.

+------------------+
| EmptyStringNULL  |
+------------------+
| John             |
| NULL             |
| NULL             |
| NULL             |
| Carol            |
| NULL             |
+------------------+
6 rows in set (0.00 sec)

정리 및 추가 팁

MySQL은 자동으로 빈 문자열을 NULL로 변환하지 않지만, NULLIF() 함수를 활용하면 조회 시점에 간단하게 처리할 수 있습니다. 만약 테이블에 저장된 실제 데이터 자체를 변경하고 싶다면 UPDATE 문과 함께 사용할 수 있습니다.

UPDATE ConvertEmptyStringToNULL SET Name = NULL WHERE Name = '';

또한 공백이 포함된 문자열까지 함께 처리하려면 TRIM() 함수를 조합하면 더욱 확실한 데이터 정제가 가능합니다.

SELECT NULLIF(TRIM(Name), '') FROM ConvertEmptyStringToNULL;