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

논리 함수

아래 함수들은 임의의 숫자형 타입 인수를 대상으로 논리 연산을 수행합니다. 이 함수들은 UInt8 타입의 0 또는 1을, 일부 경우에는 NULL을 반환합니다.

인수가 0이면 false로, 0이 아닌 값이면 true로 간주합니다.

and

도입 버전: v1.1

두 개 이상의 값에 대한 논리곱을 계산합니다.

설정 short_circuit_function_evaluation은 단락(short-circuit) 평가 사용 여부를 제어합니다. 활성화된 경우, val_i(val_1 AND val_2 AND ... AND val_{i-1})true일 때만 평가됩니다.

예를 들어, 단락 평가가 활성화된 상태에서는 SELECT and(number = 2, intDiv(1, number)) FROM numbers(5) 쿼리를 실행해도 0으로 나누기 예외가 발생하지 않습니다. 인자로 전달된 값이 0이면 false로, 0이 아니면 true로 간주됩니다.

구문

and(val1, val2[, ...])

인수

반환 값

다음을 반환합니다:

  • 하나 이상의 인수가 false로 평가되면 0
  • 어느 인수도 false로 평가되지 않고 적어도 하나의 인수가 NULL이면 NULL
  • 그 외의 경우에는 1 Nullable(UInt8)

예시

기본 사용법

SELECT and(0, 1, -2);
0

NULL이 포함된 경우

SELECT and(NULL, 1, 10, -2);
ᴺᵁᴸᴸ

not

도입 버전: v1.1

값의 논리 부정을 계산합니다. 인수가 0이면 false로, 0이 아닌 값이면 true로 간주됩니다.

구문

not(val)

인수

반환값

다음을 반환합니다.

  • valfalse로 평가되면 1
  • valtrue로 평가되면 0
  • valNULL이면 NULL Nullable(UInt8)

예시

기본 사용

SELECT NOT(1);
0

or

도입 버전: v1.1

두 개 이상의 값에 대한 논리합을 계산합니다.

short_circuit_function_evaluation 설정은 단락 평가(short-circuit evaluation) 사용 여부를 제어합니다. 이 설정이 활성화된 경우 val_i((NOT val_1) AND (NOT val_2) AND ... AND (NOT val_{i-1}))true 인 경우에만 계산됩니다.

예를 들어 단락 평가가 활성화된 상태에서 SELECT or(number = 0, intDiv(1, number) != 0) FROM numbers(5) 쿼리를 실행하면 0으로 나누기 예외가 발생하지 않습니다. 인자로 전달된 0은 false 로, 0이 아닌 값은 true 로 간주됩니다.

구문

or(val1, val2[, ...])

인수

반환 값

다음을 반환합니다:

  • 하나 이상의 인수가 true로 평가되면 1
  • 모든 인수가 false로 평가되면 0
  • 모든 인수가 false로 평가되고 적어도 하나의 인수가 NULL이면 NULL Nullable(UInt8)

예시

기본 사용법

SELECT or(1, 0, 0, 2, NULL);
1

NULL 포함 시

SELECT or(0, NULL);
ᴺᵁᴸᴸ

xor

도입된 버전: v1.1

두 개 이상의 값에 대한 논리적 배타적 논리합을 계산합니다. 두 개를 초과하는 입력 값이 주어지면, 함수는 먼저 처음 두 값을 xor 연산하고, 이어서 그 결과를 세 번째 값과 xor 연산하는 식으로 계속 수행합니다. 인수가 0이면 false로, 0이 아닌 값이면 true로 간주합니다.

구문

xor(val1, val2[, ...])

인수

반환 값

다음 값을 반환합니다:

  • 1 — 두 값인 경우, 한 값은 false로 평가되고 다른 값은 그렇지 않은 경우
  • 0 — 두 값인 경우, 두 값 모두 false로 평가되거나 두 값 모두 true로 평가되는 경우
  • NULL — 입력값 중 하나 이상이 NULL인 경우. Nullable(UInt8)

예시

기본 사용법

SELECT xor(0, 1, 1);
0