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

논리 함수

아래 함수들은 어떤 숫자형 인자에 대해서든 논리 연산을 수행합니다. 이 함수들은 UInt8 타입의 0 또는 1을, 경우에 따라 NULL을 반환합니다.

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

and

도입된 버전: v1.1.0

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

short_circuit_function_evaluation 설정은 쇼트서킷(short-circuit) 평가 사용 여부를 제어합니다. 이 설정이 활성화되면 (val_1 AND val_2 AND ... AND val_{i-1})true인 경우에만 val_i가 평가됩니다.

예를 들어 쇼트서킷 평가가 활성화된 경우, 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

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

구문

not(val)

인수

반환 값

다음을 반환합니다.

  • valfalse로 평가되면 1을 반환합니다.
  • valtrue로 평가되면 0을 반환합니다.
  • valNULL이면 NULL을 반환합니다. Nullable(UInt8)

예시

기본 사용법

SELECT NOT(1);
0

or

도입 버전: v1.1.0

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

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.0

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

구문

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

인수

반환 값

다음을 반환합니다:

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

예시

기본 사용법

SELECT xor(0, 1, 1);
0