NULL 처리 함수

NULL 처리 함수 (Functions for Nulls)

NULL 값을 다룰 때 쓰는 함수들이에요. 값이 NULL인지 확인하거나, NULL을 다른 값으로 치환하거나, Nullable 타입으로 변환하는 데 사용해요.

출처: 문서

본문

assumeNotNull

Introduced in: v1.1.0

Nullable 타입의 값에 대해, NULL이 아닌 대응 값을 반환해요. 원래 값이 NULL이면 임의의 결과가 반환될 수 있어요.

관련 함수: coalesceifNull.

구문 (Syntax)

assumeNotNull(x)

인자 (Arguments)

  • x — 어떤 nullable 타입이든 원래 값이에요. Nullable(T)

반환 값 (Returned value)

원래 값이 NULL이 아니었으면 NULL이 아닌 값을, 입력 값이 NULL이었으면 임의의 값을 반환해요. Any

예시 (Examples)

사용 예 (Usage example)

CREATE TABLE t_null (x Int8, y Nullable(Int8))
ENGINE=MergeTree()
ORDER BY x;

INSERT INTO t_null VALUES (1, NULL), (2, 3);

SELECT assumeNotNull(y) FROM t_null;
SELECT toTypeName(assumeNotNull(y)) FROM t_null;
┌─assumeNotNull(y)─┐
│                0 │
│                3 │
└──────────────────┘
┌─toTypeName(assumeNotNull(y))─┐
│ Int8                         │
│ Int8                         │
└──────────────────────────────┘

coalesce

Introduced in: v1.1.0

가장 왼쪽에 있는 NULL이 아닌 인자를 반환해요.

구문 (Syntax)

coalesce(x[, y, ...])

인자 (Arguments)

  • x[, y, ...] — 비복합(non-compound) 타입의 인자를 원하는 만큼 받아요. 모든 인자는 서로 호환되는 데이터 타입이어야 해요. Any

반환 값 (Returned value)

첫 번째 NULL이 아닌 인자를 반환하고, 모든 인자가 NULL이면 NULL을 반환해요. Any 또는 NULL

예시 (Examples)

사용 예 (Usage example)

-- 고객에게 연락할 수 있는 여러 수단을 지정할 수 있는 연락처 목록을 생각해 보세요.

CREATE TABLE aBook
(
    name String,
    mail Nullable(String),
    phone Nullable(String),
    telegram Nullable(UInt32)
)
ENGINE = MergeTree
ORDER BY tuple();

INSERT INTO aBook VALUES ('client 1', NULL, '123-45-67', 123), ('client 2', NULL, NULL, NULL);

-- mail과 phone 필드는 String 타입이지만, telegram 필드는 UInt32라서 String으로 변환해야 해요.

-- 연락처 목록에서 고객에게 연락할 수 있는 첫 번째 수단을 가져와요

SELECT name, coalesce(mail, phone, CAST(telegram,'Nullable(String)')) FROM aBook;
┌─name─────┬─coalesce(mail, phone, CAST(telegram, 'Nullable(String)'))─┐
│ client 1 │ 123-45-67                                                 │
│ client 2 │ ᴺᵁᴸᴸ                                                      │
└──────────┴───────────────────────────────────────────────────────────┘

firstNonDefault

Introduced in: v25.9.0

인자 집합에서 첫 번째 기본값이 아닌 값을 반환해요.

구문 (Syntax)

firstNonDefault(arg1[, arg2[ ...]])

인자 (Arguments)

  • arg1 — 확인할 첫 번째 인자 - arg2 — 확인할 두 번째 인자 - ... — 확인할 추가 인자

반환 값 (Returned value)

결과 타입은 모든 인자의 슈퍼타입이에요.

예시 (Examples)

정수 (integers)

SELECT firstNonDefault(0, 1, 2)
1

문자열 (strings)

SELECT firstNonDefault('', 'hello', 'world')
hello

NULL (nulls)

SELECT firstNonDefault(NULL, 0 :: UInt8, 1 :: UInt8)
1

nullable 0 (nullable zero)

SELECT firstNonDefault(NULL, 0 :: Nullable(UInt8), 1 :: Nullable(UInt8))
0

ifNull

Introduced in: v1.1.0

첫 번째 인자가 NULL이면 대체 값을 반환해요.

구문 (Syntax)

ifNull(x, alt)

인자 (Arguments)

  • xNULL인지 확인할 값이에요. Any
  • altxNULL일 때 함수가 반환하는 값이에요. Any

반환 값 (Returned value)

xNULL이 아니면 x의 값을, 그렇지 않으면 alt를 반환해요. Any

예시 (Examples)

사용 예 (Usage example)

SELECT ifNull('a', 'b'), ifNull(NULL, 'b');
┌─ifNull('a', 'b')─┬─ifNull(NULL, 'b')─┐
│ a                │ b                 │
└──────────────────┴───────────────────┘

isNotNull

Introduced in: v1.1.0

인자가 NULL이 아닌지 확인해요.

관련 연산자: IS NOT NULL.

구문 (Syntax)

isNotNull(x)

인자 (Arguments)

  • x — 비복합 데이터 타입의 값이에요. Any

반환 값 (Returned value)

xNULL이 아니면 1, 그렇지 않으면 0을 반환해요. UInt8

예시 (Examples)

사용 예 (Usage example)

CREATE TABLE t_null
(
  x Int32,
  y Nullable(Int32)
)
ENGINE = MergeTree
ORDER BY tuple();

INSERT INTO t_null VALUES (1, NULL), (2, 3);

SELECT x FROM t_null WHERE isNotNull(y);
┌─x─┐
│ 2 │
└───┘

isNull

Introduced in: v1.1.0

인자가 NULL인지 확인해요.

관련 연산자: IS NULL.

구문 (Syntax)

isNull(x)

인자 (Arguments)

  • x — 비복합 데이터 타입의 값이에요. Any

반환 값 (Returned value)

xNULL이면 1, 그렇지 않으면 0을 반환해요. UInt8

예시 (Examples)

사용 예 (Usage example)

CREATE TABLE t_null
(
  x Int32,
  y Nullable(Int32)
)
ENGINE = MergeTree
ORDER BY tuple();

INSERT INTO t_null VALUES (1, NULL), (2, 3);

SELECT x FROM t_null WHERE isNull(y);
┌─x─┐
│ 1 │
└───┘

isNullable

Introduced in: v22.7.0

인자의 데이터 타입이 Nullable인지(즉 NULL 값을 허용하는지) 확인해요.

구문 (Syntax)

isNullable(x)

인자 (Arguments)

  • x — 어떤 데이터 타입이든 값이에요. Any

반환 값 (Returned value)

xNullable 데이터 타입이면 1, 그렇지 않으면 0을 반환해요. UInt8

예시 (Examples)

사용 예 (Usage example)

CREATE TABLE tab (
    ordinary_col UInt32,
    nullable_col Nullable(UInt32)
)
ENGINE = MergeTree
ORDER BY tuple();
INSERT INTO tab (ordinary_col, nullable_col) VALUES (1,1), (2, 2), (3,3);
SELECT isNullable(ordinary_col), isNullable(nullable_col) FROM tab;
┌─isNullable(ordinary_col)─┬─isNullable(nullable_col)─┐
│                        0 │                        1 │
│                        0 │                        1 │
│                        0 │                        1 │
└──────────────────────────┴──────────────────────────┘

isZeroOrNull

Introduced in: v20.3.0

인자가 0(0) 또는 NULL인지 확인해요.

구문 (Syntax)

isZeroOrNull(x)

인자 (Arguments)

  • x — 숫자 값이에요. UInt

반환 값 (Returned value)

xNULL이거나 0과 같으면 1, 그렇지 않으면 0을 반환해요. UInt8/16/32/64 또는 Float32/Float64

예시 (Examples)

사용 예 (Usage example)

CREATE TABLE t_null
(
  x Int32,
  y Nullable(Int32)
)
ENGINE = MergeTree
ORDER BY tuple();

INSERT INTO t_null VALUES (1, NULL), (2, 0), (3, 3);

SELECT x FROM t_null WHERE isZeroOrNull(y);
┌─x─┐
│ 1 │
│ 2 │
└───┘

nullIf

Introduced in: v1.1.0

두 인자가 같으면 NULL을 반환해요.

구문 (Syntax)

nullIf(x, y)

인자 (Arguments)

  • x — 첫 번째 값이에요. Any
  • y — 두 번째 값이에요. Any

반환 값 (Returned value)

두 인자가 같으면 NULL을 반환하고, 그렇지 않으면 첫 번째 인자를 반환해요. NULL 또는 Nullable(x)

예시 (Examples)

사용 예 (Usage example)

SELECT nullIf(1, 1), nullIf(1, 2);
┌─nullIf(1, 1)─┬─nullIf(1, 2)─┐
│         ᴺᵁᴸᴸ │            1 │
└──────────────┴──────────────┘

toNullable

Introduced in: v1.1.0

주어진 인자의 타입을 Nullable로 변환해요.

구문 (Syntax)

toNullable(x)

인자 (Arguments)

  • x — 비복합 타입의 값이에요. Any

반환 값 (Returned value)

입력 값을 Nullable 타입으로 반환해요. Nullable(Any)

예시 (Examples)

사용 예 (Usage example)

SELECT toTypeName(10), toTypeName(toNullable(10));
┌─toTypeName(10)─┬─toTypeName(toNullable(10))─┐
│ UInt8          │ Nullable(UInt8)            │
└────────────────┴────────────────────────────┘

더 알아보기 (Learn more)

  • ClickHouse 함수 목록 전체는 함수 개요를 참고해요.