본문으로 바로가기
본문으로 바로가기

널 허용 값 작업을 위한 함수

assumeNotNull

도입 버전: v1.1

Nullable 타입 값에 대해, 이에 대응하는 널 허용이 아닌(non-Nullable) 값을 반환합니다. 원래 값이 NULL인 경우, 임의의 값을 반환할 수 있습니다.

함수 ifNull, coalesce도 참고하십시오.

문법

assumeNotNull(x)

인자

  • x — 임의의 널 허용 타입의 값. Nullable(T)

반환 값

원래 값이 NULL이 아니면 널을 허용하지 않는 값을 반환하고, 입력 값이 NULL인 경우 임의의 값을 반환합니다. Any

예시

사용 예시

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 table;
SELECT toTypeName(assumeNotNull(y)) FROM t_null;
┌─assumeNotNull(y)─┐
│                0 │
│                3 │
└──────────────────┘
┌─toTypeName(assumeNotNull(y))─┐
│ Int8                         │
│ Int8                         │
└──────────────────────────────┘

coalesce

도입: v1.1

가장 왼쪽에 위치한 NULL이 아닌 인수를 반환합니다.

구문

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

인수

  • x[, y, ...] — 비복합(non-compound) 타입의 인수 여러 개. 모든 인수는 서로 호환 가능한 데이터 타입이어야 합니다. Any

반환값

첫 번째 NULL이 아닌 인수를 반환하며, 모든 인수가 NULL인 경우 NULL을 반환합니다. Any 또는 NULL

예제

사용 예제

-- Consider a list of contacts that may specify multiple ways to contact a customer.

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);

-- The mail and phone fields are of type String, but the telegram field is UInt32 so it needs to be converted to String.

-- Get the first available contact method for the customer from the contact list

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

도입된 버전: v25.9

여러 인수 중에서 기본값이 아닌 첫 번째 값을 반환합니다.

구문

인수

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

반환값

결과 타입은 모든 인수의 슈퍼타입입니다.

예시

정수

SELECT firstNonDefault(0, 1, 2)
1

문자열

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

NULL 값

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

널 허용 0 값

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

ifNull

도입된 버전: v1.1

첫 번째 인자가 NULL인 경우 대체 값을 반환합니다.

문법

ifNull(x, alt)

인수

  • xNULL인지 확인할 값입니다. Any
  • altxNULL일 때 함수가 반환하는 값입니다. Any

반환 값

xNULL이 아니면 x 값을, 그렇지 않으면 alt 값을 반환합니다. Any

예시

사용 예시

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

isNotNull

도입 버전: v1.1

인자가 NULL이 아닌지 확인합니다.

관련 항목: 연산자 IS NOT NULL.

구문

isNotNull(x)

인자

  • x — 복합 타입이 아닌 데이터 타입의 값. Any

반환 값

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

예시

사용 예시

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

도입된 버전: v1.1

인수가 NULL인지 검사합니다.

다음 연산자도 참조하십시오: IS NULL.

구문

isNull(x)

인자

  • x — 비복합(non-compound) 데이터 타입 값. Any

반환 값

xNULL이면 1을, 그렇지 않으면 0을 반환합니다. UInt8

예시

사용 예시

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

도입 버전: v22.7

인수의 데이터 타입이 Nullable(널 허용)인지, 즉 NULL 값을 허용하는지 확인합니다.

구문

isNullable(x)

인수

  • x — 임의의 데이터 타입의 값. Any

반환 값

x가 널 허용(Nullable) 데이터 타입이면 1, 그렇지 않으면 0을 반환합니다. UInt8

예시

사용 예시

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

도입 버전: v20.3

인수가 0 또는 NULL인지 확인합니다.

구문

isZeroOrNull(x)

인수

  • x — 숫자형 값. UInt

반환 값

xNULL이거나 0이면 1, 그렇지 않으면 0을 반환합니다. UInt8/16/32/64 또는 Float32/Float64

예시

사용 예시

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

도입 버전: v1.1

두 인자가 같으면 NULL을 반환합니다.

구문

nullIf(x, y)

인수

  • x — 첫 번째 값입니다. Any
  • y — 두 번째 값입니다. Any

반환 값

두 인수가 같으면 NULL을 반환하고, 그렇지 않으면 첫 번째 인수를 반환합니다. NULL 또는 Nullable(x)(널 허용)

예시

사용 예시

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

toNullable

도입된 버전: v1.1

제공된 인수의 데이터 타입을 Nullable(널 허용)로 변환합니다.

구문

toNullable(x)

인수

  • x — 임의의 비복합 타입 값. Any

반환 값

입력값을 Nullable(널 허용) 타입으로 반환합니다. Nullable(Any)

예시

사용 예시

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