리눅스에서 스크립트를 작성하고 있는데 테이블에 있는 값을 조회해서 다른 테이블에 넣는 작업을 하고 있었다. 오라클 DB로 SELECT한 결과 값을 따로 파일에 저장하고 그 파일을 가져오는 데 있어서 null 인 값들은 리눅스에서 공백('')으로 저장이 되어진다. 그래서 파일에 있는 값들을 읽어서 파라미터로 INSERT를 하려면 공백인 값들은 인식이 안되는 문제가 생기게 된다.
어떻게 할까..? 고민하다가 null인 값들은 문자열 'null'로 저장하자는 결론을 내렸다.
이러한 null을 처리해서 다른 문자열로 대체하는 SQL 함수를 소개하려고 한다.
일단 NULL 이라는 아이를 먼저 알아보자!
NULL 이란?
- NULL 값은 아직 정의되지 않은 값으로 0 또는 공백과 다르다. 0은 숫자고, 공백은 하나의 문자이다
- 테이블을 생성할 때 NOT NULL 또는 RPIMARY KEY로 정의되지 않은 모든 데이터 유형은 NULL 값을 포함할 수 있다.
- NULL 값을 포함하는 연산의 경우 결과 값도 NULL 값이다. 모르는 데이터에 숫자를 더하거나 빼도 결과는 마찬가지로 모르는 데이터 인 것과 같다.
> NULL + 1 = NULL
> NULL - 2 = NULL
> NULL * 2 = NULL
> NULL / 2 = NULL
NULL(표현식1, 표현식2) / ISNULL(표현식1, 표현식2)
표현식1의 결과가 NULL인 경우 표현식2의 값으로 출력한다.
단, 표현식1과 표현식2의 결과 데이터 타입이 같아야 한다. NULL 관련해서 가장 많이 쓰는 함수라 상당히 중요하다.
일단, 오라클에서는 NVL 함수를 사용한다.
NVL(NULL 판단 대상, '컬럼이 NULL일 경우 대체값')
SELECT NVL(NULL, 'NVL-OK') AS NVL_TEST
FROM DUAL;
SELECT NVL('Not-Null', 'NVL-OK') NVL_TEST
FROM DUAL;
문자열 'Not-Null'은 null이 아니니 'Not-Null'을 출력한다.
SELECT NVL(URL,'null') from TEST;
TEST 테이블의 URL컬럼값이 NULL인 경우 문자열 'null'로 대체하여 출력
ISNULL(NULL 판단 대상, 'NULL일 때 대체값')
SQL Server의 경우 ISNULL 함수를 사용한다. 결과는 NULL함수랑 동일하다.
'Database > Oracle' 카테고리의 다른 글
[Oracle] SQL Developer 날짜 format 변경 (0) | 2021.11.22 |
---|---|
오라클 TO_DATE - String 타입을 Date타입으로 변환 (0) | 2021.11.19 |
Oracle SQL 테이블 컬럼명, 테이블명 출력 (0) | 2021.10.21 |