산술 함수
개요
산술 함수는 UInt8, UInt16, UInt32, UInt64, Int8, Int16, Int32, Int64, Float32, Float64 타입의 두 피연산자에 대해 동작합니다.
연산을 수행하기 전에 두 피연산자는 결과 타입으로 캐스팅됩니다. 결과 타입은 (아래 함수 문서에서 달리 명시되지 않는 한) 다음과 같이 결정됩니다.
- 두 피연산자 모두 32비트 이하인 경우, 결과 타입의 크기는 두 피연산자 중 더 큰 타입보다 한 단계 더 큰 타입의 크기가 됩니다(정수 크기 승격). 예:
UInt8 + UInt16 = UInt32,Float32 * Float32 = Float64. - 피연산자 중 하나가 64비트 이상인 경우, 결과 타입의 크기는 두 피연산자 중 더 큰 타입의 크기와 동일합니다. 예:
UInt32 + UInt128 = UInt128,Float32 * Float64 = Float64. - 피연산자 중 하나가 부호 있는(signed) 타입이면 결과 타입도 부호 있는(signed) 타입이 되며, 그렇지 않으면 부호 없는(unsigned) 타입이 됩니다. 예:
UInt32 * Int32 = Int64,UInt32 * UInt32 = UInt64.
이 규칙들은 결과 타입이 모든 가능한 결과를 표현할 수 있는 가장 작은 타입이 되도록 보장합니다. 이는 값 범위 경계 주변에서 오버플로 위험을 일으킬 수 있지만, 64비트라는 최대 네이티브 정수 폭을 사용하여 계산이 빠르게 수행되도록 합니다. 또한 이 동작은 가장 큰 정수 타입으로 64비트 정수(BIGINT)를 제공하는 많은 다른 데이터베이스와의 호환성을 보장합니다.
예시:
오버플로 동작은 C++과 동일합니다.
abs
도입 버전: v1.1.0
x의 절댓값을 계산합니다. x가 부호 없는 타입이면 결과는 변경되지 않습니다. x가 부호 있는 타입이면 부호 없는 수를 반환합니다.
구문
인수
x— 절대값을 구할 값
반환값
x의 절대값
예시
사용 예시
avg2
도입된 버전: v25.11.0
제공된 인수의 평균값을 계산하여 반환합니다. 숫자형 및 시간 관련 타입을 지원합니다.
구문
인수
x1, x2]— 평균을 계산하기 위해 두 개의 값을 입력으로 받습니다.
반환 값
제공된 인수들의 평균값을 계산한 뒤, 호환 가능한 가장 큰 데이터 타입으로 승격하여 반환합니다.
예시
숫자 타입
Decimal 데이터 타입
Date 데이터 타입
DateTime 데이터 타입
Time64 데이터 타입
byteSwap
도입 버전: v23.10.0
정수의 바이트 순서를 반전합니다. 즉, endianness를 변경합니다.
아래 예시는 다음과 같은 방식으로 이해할 수 있습니다.
- 10진수 정수를 big-endian 형식의 16진수로 변환합니다. 예: 3351772109 -> C7 C7 FB CD (4바이트)
- 바이트 순서를 반전합니다. 예: C7 C7 FB CD -> CD FB C7 C7
- 결과를 big-endian으로 가정하고 다시 정수로 변환합니다. 예: CD FB C7 C7 -> 3455829959 이 FUNCTION의 한 가지 사용 사례는 IPv4 주소의 바이트 순서를 반전하는 것입니다:
문법
인수
x— 정수 값입니다.(U)Int*
반환 값
바이트 순서를 반대로 한 x를 반환합니다. (U)Int*
예시
사용 예시
8비트
16비트
32비트
64비트
divide
도입 버전: v1.1.0
두 값 a와 b의 몫을 계산합니다. 결과 타입은 항상 Float64입니다. 정수 나눗셈은 intDiv FUNCTION으로 수행됩니다.
0으로 나누는 경우 inf, -inf, 또는 nan을 반환합니다.
구문
인수
x— 피제수,y— 제수
반환값
x를 y로 나눈 몫
예시
두 수 나누기
0으로 나누는 경우
divideDecimal
도입: v22.12.0
두 개의 decimal 값에 대해 나눗셈을 수행합니다. 결과값의 타입은 Decimal256입니다.
결과 스케일(scale)은 result_scale 인자(범위 [0, 76]의 const Integer)로 명시적으로 지정할 수 있습니다. 지정하지 않으면 결과 스케일은 전달된 인자들의 스케일 중 최대값이 됩니다.
이 함수는 일반 divide보다 상당히 느리게 동작합니다.
정밀도를 엄격히 제어할 필요가 없거나 빠른 계산이 더 중요하다면 divide를 사용하는 것을 고려하십시오.
구문
인수(Arguments)
반환값
지정된 스케일로 수행한 나누기 연산의 결과. Decimal256
예시(Examples)
예시 1
예제 2
divideOrNull
도입 버전: v25.5.0
divide와 동일하지만, 0으로 나눌 때 NULL을 반환합니다.
구문
인수
x— 피제수,y— 제수
반환 값
x를 y로 나눈 몫, 또는 NULL입니다.
예시
0으로 나누기
gcd
도입 버전: v1.1.0
두 값 a와 b의 최대공약수를 반환합니다.
0으로 나누거나, 최소 음수 값(최솟값인 음수)을 -1로 나누는 경우 예외가 발생합니다.
구문
인수
x— 첫 번째 정수,y— 두 번째 정수
반환 값
x와 y의 최대공약수입니다.
예시
사용 예시
ifNotFinite
도입된 버전: v20.3.0
부동소수점 값이 유한한지 확인합니다.
삼항 연산자를 사용하여 비슷한 결과를 얻을 수 있습니다: isFinite(x) ? x : y.
구문
인수
반환 값
x가 유한하면x.x가 유한하지 않으면y.
예시
사용 예시
intDiv
도입 버전: v1.1.0
값 x를 y로 정수 나눗셈합니다. 다시 말해,
몫을 가장 가까운 더 작은 정수로 내림하여 계산합니다.
결과의 비트 너비는 피제수(첫 번째 매개변수)와 동일합니다.
0으로 나누는 경우, 몫이 피제수의 범위를 벗어나는 경우, 또는 표현 가능한 최소 음수 값을 -1로 나누는 경우에는 예외가 발생합니다.
문법
인수
x— 왼쪽 피연산자입니다. -y— 오른쪽 피연산자입니다.
반환 값
x와 y의 정수 나눗셈 결과입니다.
예시
두 개의 부동소수점 수에 대한 정수 나눗셈
몫이 피제수의 범위를 벗어납니다
intDivOrNull
도입된 버전: v25.5.0
intDiv와 동일하지만, 0으로 나누거나 최소 음수를 -1로 나눌 때 NULL을 반환합니다.
구문
인자
반환 값
x와 y의 정수 나눗셈의 결과 또는 NULL입니다.
예제
0으로 나누는 정수 나눗셈
최소 음수 값을 -1로 나누기
intDivOrZero
도입 버전: v1.1.0
intDiv와 동일하지만 0으로 나누는 경우나, 최소 음수 값을 -1로 나누는 경우 0을 반환합니다.
구문
인수
반환 값
a와 b에 대한 정수 나눗셈 결과 또는 0입니다.
예제
0으로 나누는 정수 나눗셈
가장 작은 음수 값을 -1로 나누기
isFinite
도입 버전: v1.1.0
Float32 또는 Float64 타입 인자가 무한대가 아니고 NaN도 아니면 1을 반환하고,
그 외의 경우 0을 반환합니다.
구문
인자
x— 유한한 값인지 확인할 숫자.Float*
반환 값
x가 무한대가 아니고 NaN도 아니면 1, 그렇지 않으면 0.
예시
숫자가 유한한지 확인
isInfinite
도입: v1.1.0
Float32 또는 Float64 형식의 인자가 무한대일 경우 1을 반환하고, 그렇지 않은 경우 0을 반환합니다.
NaN인 경우에도 0을 반환합니다.
구문
인수
x— 무한대인지 확인할 숫자.Float*
반환 값
x가 무한대이면 1, 그렇지 않으면 0입니다 (NaN 포함).
예시
숫자가 무한대인지 확인
isNaN
도입 버전: v1.1.0
Float32 및 Float64 형 인자가 NaN이면 1을 반환하고, 그렇지 않으면 0을 반환합니다.
구문
인수
x—NaN인지 평가할 인수.Float*
반환 값
NaN이면 1, 그렇지 않으면 0을 반환합니다.
예제
사용 예제
lcm
도입 버전: v1.1.0
두 값 x와 y의 최소 공배수를 반환합니다.
0으로 나누거나, 가장 작은 음수를 -1로 나누면 예외가 발생합니다.
구문
인수
반환값
x와 y의 최소공배수를 반환합니다. (U)Int*
예시
사용 예시
max2
도입된 버전: v21.11.0
두 개의 숫자형 값 x와 y 중 더 큰 값을 반환합니다.
구문
인수
x— 첫 번째 값(U)Int8/16/32/64또는Float*또는Decimaly— 두 번째 값(U)Int8/16/32/64또는Float*또는Decimal
반환 값
x와 y 중 더 큰 값을 반환합니다. 반환 타입은 Float64입니다.
예제
사용 예제
midpoint
도입 버전: v25.11.0
제공된 인수들의 평균값을 계산하여 반환합니다. 수치형 및 시간 타입을 지원합니다.
구문
인수
x1[, x2, ...]— 단일 값 또는 여러 값을 받아 평균을 계산합니다.
반환 값
제공된 인수의 평균값을 반환하며, 호환 가능한 가장 큰 타입으로 승격됩니다.
예시
숫자형 타입
Decimal 타입
Date 타입
DateTime 데이터 타입
Time64 타입
min2
도입된 버전: v21.11.0
두 개의 숫자 값 x와 y 중 더 작은 값을 반환합니다.
구문
인수
x— 첫 번째 값(U)Int8/16/32/64또는Float*또는Decimaly— 두 번째 값(U)Int8/16/32/64또는Float*또는Decimal
반환값
반환되는 값은 x와 y 중 더 작은 값입니다. Float64
예시
사용 예시
minus
도입 버전: v1.1.0
두 값 a와 b의 차이를 계산합니다. 결과는 항상 부호 있는 값입니다.
plus와 마찬가지로, 날짜 또는 날짜·시간 값에서 정수를 뺄 수 있습니다.
또한 두 날짜·시간 값 사이의 뺄셈도 지원하며, 이 경우 두 값 사이의 시간 차이를 반환합니다.
구문
인수
x— 피감수(minuend). -y— 감수(subtrahend).
반환 값
x에서 y를 뺀 값
예제
두 숫자 뺄셈
정수와 날짜의 뺄셈
modulo
도입된 버전: v1.1.0
두 값 a와 b에 대해, a를 b로 나눈 나머지를 계산합니다.
두 입력이 모두 정수이면 결과 타입은 정수입니다. 입력 중 하나가 부동 소수점 수이면 결과 타입은 Float64입니다.
나머지는 C++과 동일한 방식으로 계산됩니다. 음수에 대해서는 절사 나눗셈이 사용됩니다.
0으로 나누거나, 표현 가능한 최소 음수 값을 -1로 나눌 때 예외가 발생합니다.
구문
별칭(Aliases): mod
인수(Arguments)
a— 피제수(나누어지는 수) —b— 제수(나누는 수, 모듈러스 값)
반환 값(Returned value)
a % b의 나머지입니다.
예시(Examples)
사용 예시(Usage example)
moduloLegacy
도입된 버전: v1.1.0
나눗셈의 나머지를 계산합니다. C++의 % 연산자를 사용하는 레거시 modulo 구현으로, 음수 인수에 대해 음수 결과를 반환할 수 있습니다. 이 함수는 기존 테이블 파티션 로직과의 하위 호환성을 위해 제공됩니다. 표준 동작을 사용하려면 modulo 또는 positiveModulo를 사용하십시오.
문법
인수
반환 값
예제
기본 사용 예
moduloOrNull
도입 버전: v25.5.0
a를 b로 나눈 나머지를 계산합니다. 함수 modulo와 유사하지만, 오른쪽 인자가 0이면 moduloOrNull은 NULL을 반환합니다.
문법
별칭(Aliases): modOrNull
인수(Arguments)
반환값(Returned value)
x를 y로 나눈 나머지를 반환하며, 제수가 0인 경우 null을 반환합니다.
예시(Examples)
제수가 0인 경우의 moduloOrNull
moduloOrZero
도입된 버전: v20.3.0
나머지 연산 함수(modulo)와 유사하지만, 나누는 수(제수)가 0일 때 예외를 발생시키는 modulo 함수와 달리 0을 반환합니다.
구문
인수
반환 값
a % b의 나머지를 반환하며, 제수가 0이면 0을 반환합니다.
예시
사용 예시
multiply
도입된 버전: v1.1.0
두 값 x와 y의 곱을 계산합니다.
구문
인수
반환 값
x와 y의 곱을 반환합니다.
예시
두 숫자 곱하기
multiplyDecimal
도입: v22.12.0
Decimal 값 두 개에 대한 곱셈을 수행합니다. 결과값의 타입은 Decimal256입니다.
결과 스케일은 result_scale 인자(범위가 [0, 76]인 상수 Integer)로 명시적으로 지정할 수 있습니다. 지정하지 않으면 결과 스케일은 전달된 인자들 중 최대 스케일이 됩니다.
이 함수들은 일반 multiply보다 상당히 느리게 동작합니다.
정밀도를 엄격하게 제어할 필요가 없거나 빠른 계산이 더 중요한 경우 multiply 사용을 고려하십시오.
구문
인수
반환 값
주어진 스케일로 수행한 곱셈 결과입니다. 타입: Decimal256
예시
사용 예시
일반 곱셈과의 차이
Decimal 오버플로
negate
도입: v1.1.0
인수 x의 부호를 반전합니다. 결과는 항상 부호 있는 값입니다.
구문
인수
x— 부호를 반전할 값입니다.
반환 값
x의 음수인 -x를 반환합니다.
예시
사용 예시
plus
도입된 버전: v1.1.0
두 값 x와 y의 합을 계산합니다. 별칭: x + y (연산자).
정수와 날짜를 더하거나, 정수와 날짜와 시간 값을 더할 수도 있습니다. 전자의
연산은 날짜의 일(day) 수를 증가시키고, 후자의 연산은 날짜와 시간 값의 초(second) 수를 증가시킵니다.
날짜와 시간을 더할 수도 있습니다. Date와 Time을 더하면
DateTime이 생성됩니다. Date와 Time64를 더하거나, Date32와
Time 또는 Time64를 더하면 DateTime64가 생성됩니다.
구문
인수
x— 왼쪽 피연산자입니다. -y— 오른쪽 피연산자입니다.
반환 값
x와 y의 합을 반환합니다.
예시
두 숫자 더하기
정수와 날짜의 덧셈
날짜와 시간의 덧셈
positiveModulo
도입: v22.11.0
x를 y로 나눌 때의 나머지를 계산합니다. FUNCTION modulo와 비슷하지만
positiveModulo는 항상 음이 아닌 숫자를 반환합니다.
구문
별칭: positive_modulo, pmod
인자
반환 값
x 이하이면서 y로 나누어떨어지는 가장 가까운 정수와 x의 차이를 반환합니다.
예시
사용 예시
positiveModuloOrNull
도입 버전: v25.5.0
a를 b로 나눌 때의 나머지를 계산합니다. 함수 positiveModulo와 유사하지만, 오른쪽 인자가 0이면 positiveModuloOrNull은 NULL을 반환합니다.
구문
별칭(Aliases): positive_modulo_or_null, pmodOrNull
인수(Arguments)
x— 피제수(dividend).(U)Int*/Float32/64. -y— 제수(모듈로, divisor).(U)Int*/Float32/64.
반환 값(Returned value)
x에서 y로 나누어떨어지는 값 가운데 x보다 크지 않은 가장 가까운 정수를 뺀 값을 반환하며, 제수가 0일 때는 null을 반환합니다.
예시(Examples)
positiveModuloOrNull