Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

الدوال الحسابية

نظرة عامة

تعمل الدوال الحسابية على أي معاملين من النوع UInt8 أو UInt16 أو UInt32 أو UInt64 أو Int8 أو Int16 أو Int32 أو Int64 أو Float32 أو Float64.

قبل تنفيذ العملية، يُحوَّل كلا المعاملين إلى نوع النتيجة. ويُحدَّد نوع النتيجة على النحو التالي (ما لم يُذكر خلاف ذلك في توثيق الدالة أدناه):

  • إذا كان عرض كلا المعاملين لا يتجاوز 32 بت، فسيكون حجم نوع النتيجة هو حجم النوع الأكبر التالي بعد أكبر المعاملين (ترقية حجم الأعداد الصحيحة). على سبيل المثال، UInt8 + UInt16 = UInt32 أو Float32 * Float32 = Float64.
  • إذا كان أحد المعاملين بعرض 64 بت أو أكثر، فسيكون حجم نوع النتيجة مساوياً لحجم أكبر المعاملين. على سبيل المثال، UInt32 + UInt128 = UInt128 أو Float32 * Float64 = Float64.
  • إذا كان أحد المعاملين موقَّعاً، فسيكون نوع النتيجة موقَّعاً أيضاً، وإلا فسيكون غير موقَّع. على سبيل المثال، UInt32 * Int32 = Int64 أو UInt32 * UInt32 = UInt64.

تضمن هذه القواعد أن يكون نوع النتيجة أصغر نوع يمكنه تمثيل جميع النتائج الممكنة. ومع أن هذا يضيف احتمال حدوث تجاوز عددي عند حدود نطاق القيم، فإنه يضمن تنفيذ العمليات الحسابية بسرعة باستخدام أكبر عرض أصلي للأعداد الصحيحة، وهو 64 بت. كما يضمن هذا السلوك التوافق مع العديد من قواعد البيانات الأخرى التي توفّر أعداداً صحيحة بطول 64 بت (BIGINT) باعتبارها أكبر نوع للأعداد الصحيحة.

مثال:

SELECT toTypeName(0), toTypeName(0 + 0), toTypeName(0 + 0 + 0), toTypeName(0 + 0 + 0 + 0)
┌─toTypeName(0)─┬─toTypeName(plus(0, 0))─┬─toTypeName(plus(plus(0, 0), 0))─┬─toTypeName(plus(plus(plus(0, 0), 0), 0))─┐
│ UInt8         │ UInt16                 │ UInt32                          │ UInt64                                   │
└───────────────┴────────────────────────┴─────────────────────────────────┴──────────────────────────────────────────┘

تحدث حالات تجاوز السعة بالطريقة نفسها كما في C++.

abs

قُدِّمت في: v1.1.0

تحسب القيمة المطلقة لـ x. ولا يكون لها أي تأثير إذا كان x من نوع غير موقَّع. أما إذا كان x من نوع موقَّع، فإنها تُرجع عددًا غير موقَّع.

البنية

abs(x)

الوسائط

  • x — القيمة المطلقة المطلوب حسابها لـ x

القيمة المُعادة

القيمة المطلقة لـ x

أمثلة

مثال للاستخدام

SELECT abs(-0.5)
0.5

avg2

أُضيف في: v25.11.0

يحسب ويُرجع متوسط قيمة المعاملات المُدخلة. يدعم الأنواع العددية والزمنية.

البنية

avg2(x1, x2])

الوسائط

  • x1, x2] — يقبل قيمتين لحساب المتوسط.

القيمة المُعادة

تُرجِع متوسط قيم الوسائط المقدَّمة، مع ترقية النوع إلى أكبر نوع متوافق.

أمثلة

الأنواع العددية

SELECT avg2(toUInt8(3), 1.0) AS result, toTypeName(result) AS type;
-- The type returned is a Float64 as the UInt8 must be promoted to 64 bit for the comparison.
┌─result─┬─type────┐
│      2 │ Float64 │
└────────┴─────────┘

الأنواع العشرية

SELECT avg2(toDecimal32(1, 2), 2) AS result, toTypeName(result) AS type;
┌─result─┬─type──────────┐
│    1.5 │ Decimal(9, 2) │
└────────┴───────────────┘

أنواع Date

SELECT avg2(toDate('2025-01-01'), toDate('2025-01-05')) AS result, toTypeName(result) AS type;
┌─────result─┬─type─┐
│ 2025-01-03 │ Date │
└────────────┴──────┘

أنواع DateTime

SELECT avg2(toDateTime('2025-01-01 00:00:00'), toDateTime('2025-01-03 12:00:00')) AS result, toTypeName(result) AS type;
┌──────────────result─┬─type─────┐
│ 2025-01-02 06:00:00 │ DateTime │
└─────────────────────┴──────────┘

أنواع Time64

SELECT avg2(toTime64('12:00:00', 0), toTime64('14:00:00', 0)) AS result, toTypeName(result) AS type;
┌───result─┬─type──────┐
│ 13:00:00 │ Time64(0) │
└──────────┴───────────┘

byteSwap

طُرحت في: v23.10.0

تعكس هذه الدالة بايتات عدد صحيح، أي تغيّر ترتيب البايتات الخاص به.

يمكن توضيح المثال أدناه على النحو التالي:

  1. حوِّل العدد الصحيح ذي الأساس 10 إلى ما يقابله بالتنسيق السداسي العشري وبترتيب big-endian، أي 3351772109 -> C7 C7 FB CD (4 بايتات)
  2. اعكس البايتات، أي C7 C7 FB CD -> CD FB C7 C7
  3. حوِّل النتيجة مرة أخرى إلى عدد صحيح بافتراض ترتيب big-endian، أي CD FB C7 C7 -> 3455829959 من حالات استخدام هذه الدالة عكس عناوين IPv4:
┌─toIPv4(byteSwap(toUInt32(toIPv4('205.251.199.199'))))─┐
│ 199.199.251.205                                       │
└───────────────────────────────────────────────────────┘

الصيغة

byteSwap(x)

المعاملات

  • x — قيمة عدد صحيح. (U)Int*

القيمة المُعادة

تُرجع x بعد عكس ترتيب البايتات. (U)Int*

أمثلة

مثال على الاستخدام

SELECT byteSwap(3351772109)
3455829959

8-بت

SELECT byteSwap(54)
54

16 بت

SELECT byteSwap(4135)
10000

32 بت

SELECT byteSwap(3351772109)
3455829959

64 بت

SELECT byteSwap(123294967295)
18439412204227788800

divide

أُضيف في: v1.1.0

يحسب خارج القسمة للقيمتين a وb. ويكون نوع النتيجة دائمًا Float64. وتوفّر الدالة intDiv القسمة الصحيحة.

البنية

divide(x, y)

وسيطات الدالة

  • x — المقسوم - y — المقسوم عليه

القيمة المُعادة

خارج القسمة لـ x على y

أمثلة

قسمة عددين

SELECT divide(25,5) AS quotient, toTypeName(quotient)
5	Float64

القسمة على صفر

SELECT divide(25,0)
inf

divideDecimal

أُضيف: v22.12.0

يجري قسمة عددين عشريين. تكون القيمة الناتجة من النوع Decimal256. يمكن تحديد مقياس النتيجة صراحةً باستخدام الوسيط result_scale (عدد صحيح ثابت ضمن النطاق [0, 76]). وإذا لم يُحدَّد، فسيكون مقياس النتيجة هو أكبر مقياس بين الوسيطات المُعطاة.

بنية

divideDecimal(x, y[, result_scale])

وسيطات الدالة

  • x — القيمة الأولى: Decimal. - y — القيمة الثانية: Decimal. - result_scale — مقياس النتيجة. النوع Int/UInt.

القيمة المُعادة

ناتج القسمة بالمقياس المحدد. Decimal256

أمثلة

مثال 1

SELECT divideDecimal(toDecimal256(-12, 0), toDecimal32(2.1, 1), 10)
┌─divideDecimal(toDecimal256(-12, 0), toDecimal32(2.1, 1), 10)─┐
│                                                -5.7142857142 │
└──────────────────────────────────────────────────────────────┘

مثال 2

SELECT toDecimal64(-12, 1) / toDecimal32(2.1, 1);
SELECT toDecimal64(-12, 1) as a, toDecimal32(2.1, 1) as b, divideDecimal(a, b, 1), divideDecimal(a, b, 5);
┌─divide(toDecimal64(-12, 1), toDecimal32(2.1, 1))─┐
│                                             -5.7 │
└──────────────────────────────────────────────────┘
┌───a─┬───b─┬─divideDecimal(a, b, 1)─┬─divideDecimal(a, b, 5)─┐
│ -12 │ 2.1 │                   -5.7 │               -5.71428 │
└─────┴─────┴────────────────────────┴────────────────────────┘

divideOrNull

أُضيفت في: v25.5.0

مماثلة لـ divide، لكنها تُرجع NULL عند القسمة على صفر.

الصياغة

divideOrNull(x, y)

الوسيطات

  • x — المقسوم - y — المقسوم عليه

القيمة المُعادة

حاصل قسمة x على y، أو NULL.

أمثلة

القسمة على صفر

SELECT divideOrNull(25, 0)
\N

gcd

قُدِّمت في: v1.1.0

تُرجِع القاسم المشترك الأكبر للقيمتين a و b.

يُطرَح استثناء عند القسمة على الصفر أو عند قسمة أصغر عدد سالب على سالب واحد.

البنية

gcd(x, y)

الوسيطات

  • x — العدد الصحيح الأول - y — العدد الصحيح الثاني

القيمة المُعادة

القاسم المشترك الأكبر لـ x و y.

أمثلة

مثال على الاستخدام

SELECT gcd(12, 18)
6

ifNotFinite

أُضيفت في: v20.3.0

يتحقق مما إذا كانت قيمة الفاصلة العائمة متناهية.

يمكنك الحصول على نتيجة مماثلة باستخدام المعامل الثلاثي: isFinite(x) ? x : y.

بنية

ifNotFinite(x,y)

وسيطات الدالة

  • x — القيمة المراد التحقق مما إذا كانت لا نهائية. Float*
  • y — القيمة البديلة. Float*

القيمة المُعادة

  • x إذا كانت x متناهية.
  • y إذا كانت x غير متناهية.

أمثلة

مثال على الاستخدام

SELECT 1/0 AS infimum, ifNotFinite(infimum,42)
inf	42

intDiv

أُضيفت في: v1.1.0

تُجري قسمةً صحيحة للقيمتين x وy. وبعبارة أخرى، تحسب خارج القسمة مع التقريب إلى الأسفل إلى أقرب عدد صحيح أصغر.

تكون النتيجة بنفس عرض المقسوم (المعلَمة الأولى).

يُثار استثناء عند القسمة على الصفر، أو عندما لا يقع خارج القسمة ضمن نطاق المقسوم، أو عند قسمة أصغر عدد سالب ممكن على سالب واحد.

بنية

intDiv(x, y)

وسيطات الدالة

  • x — المعامل الأيسر. - y — المعامل الأيمن.

القيمة المُعادة

ناتج القسمة الصحيحة لـ x على y

أمثلة

القسمة الصحيحة لعددين من النوع Float

SELECT intDiv(toFloat64(1), 0.001) AS res, toTypeName(res)
┌──res─┬─toTypeName(res)─┐
│ 1000 │ Int64           │
└──────┴─────────────────┘

ناتج القسمة لا يقع ضمن نطاق المقسوم

SELECT
intDiv(1, 0.001) AS res,
toTypeName(res)
Received exception from server (version 23.2.1):
Code: 153. DB::Exception: Received from localhost:9000. DB::Exception:
Cannot perform integer division, because it will produce infinite or too
large number: While processing intDiv(1, 0.001) AS res, toTypeName(res).
(ILLEGAL_DIVISION)

intDivOrNull

تم تقديمه في: v25.5.0

مماثلة لـ intDiv، لكنها تُرجع NULL عند القسمة على صفر أو عند قسمة أصغر عدد سالب على سالب واحد.

الصياغة

intDivOrNull(x, y)

الوسيطات

  • x — المعامل الأيسر. (U)Int*
  • y — المعامل الأيمن. (U)Int*

القيمة المُعادة

ناتج القسمة الصحيحة لـ x و y، أو NULL.

أمثلة

القسمة الصحيحة على الصفر

SELECT intDivOrNull(1, 0)
\N

قسمة أصغر عدد سالب على ‎-1

SELECT intDivOrNull(-9223372036854775808, -1)
\N

intDivOrZero

أُضيفت في: v1.1.0

مماثلة لـ intDiv، لكنها تُرجِع صفرًا عند القسمة على صفر أو عند قسمة أصغر عدد صحيح سالب ممكن على سالب واحد.

البنية

intDivOrZero(a, b)

المعاملات

  • a — المعامل الأيسر. (U)Int*
  • b — المعامل الأيمن. (U)Int*

القيمة المُعادة

ناتج القسمة الصحيحة للعددين a وb، أو صفر.

أمثلة

القسمة الصحيحة على صفر

SELECT intDivOrZero(1, 0)
0

قسمة أصغر عدد سالب على ‎-1

SELECT intDivOrZero(0.05, -1)
0

isFinite

أُضيفت في: v1.1.0

تُرجع 1 إذا كانت الوسيطة من النوع Float32 أو Float64 أو BFloat16 غير لانهائية وليست NaN، وإلا فستُرجع هذه الدالة 0.

البنية

isFinite(x)

الوسيطات

  • x — العدد المراد التحقق مما إذا كان متناهيًا. Float* أو BFloat16

القيمة المُعادة

1 إذا لم تكن قيمة x غير متناهية ولم تكن NaN، وإلا فالقيمة 0.

أمثلة

اختبر ما إذا كان العدد متناهيًا

SELECT isFinite(inf)
0

isInfinite

أُضيف في: v1.1.0

تُعيد 1 إذا كانت الوسيطة من النوع Float32 أو Float64 أو BFloat16 قيمةً لا نهائية، وإلا فتُعيد هذه الدالة 0. لاحظ أن القيمة 0 تُعاد أيضًا في حالة NaN.

البنية

isInfinite(x)

وسيطات الدالة

  • x — العدد المراد التحقق مما إذا كان لا نهائيًا. Float* أو BFloat16

القيمة المُعادة

1 إذا كان x لا نهائيًا، وإلا 0 (بما في ذلك NaN).

أمثلة

التحقق مما إذا كان العدد لا نهائيًا

SELECT isInfinite(inf), isInfinite(NaN), isInfinite(10)
1	0	0

isNaN

أُضيفت في: v1.1.0

تعيد 1 إذا كانت الوسيطة من النوع Float32 أو Float64 أو BFloat16 تساوي NaN، وإلا فتعيد 0.

الصياغة

isNaN(x)

الوسائط

  • x — الوسيط المطلوب التحقق مما إذا كانت قيمته NaN. Float* أو BFloat16

القيمة المعادة

1 إذا كانت القيمة NaN، وإلا 0

أمثلة

مثال على الاستخدام

SELECT isNaN(NaN)
1

lcm

استُحدثت في: v1.1.0

تعيد المضاعف المشترك الأصغر للقيمتين x وy.

يُثار استثناء عند القسمة على صفر أو عند قسمة أصغر عدد سالب ممكن على سالب واحد.

البنية

lcm(x, y)

المعاملات

  • x — العدد الصحيح الأول. (U)Int*
  • y — العدد الصحيح الثاني. (U)Int*

القيمة المُعادة

يعيد المضاعف المشترك الأصغر لـ x وy. (U)Int*

أمثلة

مثال على الاستخدام

SELECT lcm(6, 8)
24

max2

تم تقديمه في: v21.11.0

يعيد القيمة الأكبر بين قيمتين رقميتين x وy.

البنية

max2(x, y)

الوسيطات

القيمة المُعادة

تُرجِع أكبر القيمتين x وy. Float64

أمثلة

مثال للاستخدام

SELECT max2(-1, 2)
2

midpoint

قُدِّمت في: v25.11.0

تحسب وتُرجع متوسط قيمة الوسيطات المُقدَّمة. تدعم الأنواع العددية والزمنية.

البنية

midpoint(x1[, x2, ...])

الوسائط

  • x1[, x2, ...] — تقبل قيمة واحدة أو عدة قيم لحساب المتوسط.

القيمة المُعادة

تعيد متوسط قيم الوسائط المُدخلة، مع ترقية النوع إلى أكبر نوع متوافق.

أمثلة

الأنواع العددية

SELECT midpoint(1, toUInt8(3), 0.5) AS result, toTypeName(result) AS type;
-- The type returned is a Float64 as the UInt8 must be promoted to 64 bit for the comparison.
┌─result─┬─type────┐
│    1.5 │ Float64 │
└────────┴─────────┘

أنواع الأعداد العشرية

SELECT midpoint(toDecimal32(1.5, 2), toDecimal32(1, 1), 2) AS result, toTypeName(result) AS type;
┌─result─┬─type──────────┐
│    1.5 │ Decimal(9, 2) │
└────────┴───────────────┘

أنواع Date

SELECT midpoint(toDate('2025-01-01'), toDate('2025-01-05')) AS result, toTypeName(result) AS type;
┌─────result─┬─type─┐
│ 2025-01-03 │ Date │
└────────────┴──────┘

أنواع DateTime

SELECT midpoint(toDateTime('2025-01-01 00:00:00'), toDateTime('2025-01-03 12:00:00')) AS result, toTypeName(result) AS type;
┌──────────────result─┬─type─────┐
│ 2025-01-02 06:00:00 │ DateTime │
└─────────────────────┴──────────┘

أنواع Time64

SELECT midpoint(toTime64('12:00:00', 0), toTime64('14:00:00', 0)) AS result, toTypeName(result) AS type;
┌───result─┬─type──────┐
│ 13:00:00 │ Time64(0) │
└──────────┴───────────┘

min2

أُضيف في: v21.11.0

يُرجع القيمة الأصغر من بين القيمتين العدديتين x وy.

البنية

min2(x, y)

الوسيطات

القيمة المُعادة

تعيد أصغر القيمتين x وy. Float64

أمثلة

مثال على الاستخدام

SELECT min2(-1, 2)
-1

minus

أُضيف في: v1.1.0

يحسب الفرق بين القيمتين a وb. تكون النتيجة دائمًا موقَّعة. وكما في plus، يمكن طرح عدد صحيح من تاريخ أو تاريخ مع وقت. بالإضافة إلى ذلك، يُدعَم الطرح بين قيمتَي تاريخ مع وقت، وينتج عنه الفرق الزمني بينهما.

البنية

minus(x, y)

الوسيطات

  • x — المطروح منه. - y — المطروح.

القيمة المعادة

x ناقص y

أمثلة

طرح عددين

SELECT minus(10, 5)
5

طرح عدد صحيح من تاريخ

SELECT minus(toDate('2025-01-01'),5)
2024-12-27

modulo

أُضيف في: v1.1.0

يحسب باقي قسمة القيمتين a وb.

يكون نوع النتيجة عددًا صحيحًا إذا كان كلا المُدخلين عددين صحيحين. وإذا كان أحد المُدخلين عددًا ذا فاصلة عائمة، فسيكون نوع النتيجة Float64.

يُحسب الباقي كما في C++. وتُستخدم القسمة المبتورة مع الأعداد السالبة.

يُطلق استثناء عند القسمة على الصفر أو عند قسمة أصغر عدد سالب على سالب واحد.

البنية

modulo(a, b)

الأسماء البديلة: mod

الوسائط

  • a — المقسوم - b — المقسوم عليه (الموديولس)

القيمة المُعادة

الباقي من a % b

أمثلة

مثال على الاستخدام

SELECT modulo(5, 2)
1

moduloLegacy

قُدِّم في: v1.1.0

يحسب باقي القسمة. هذا هو التنفيذ القديم لـ modulo الذي يستخدم العامل % في C++، وقد يُنتج نتائج سالبة عند استخدام وسيطات سالبة. وُجدت هذه الدالة للحفاظ على التوافق مع الإصدارات السابقة لمنطق تقسيم الجدول القديم. استخدم modulo أو positiveModulo للحصول على السلوك القياسي.

الصياغة

moduloLegacy(a, b)

الوسيطات

القيمة المُعادة

تعيد ناتج باقي القسمة. (U)Int* أو Float*

أمثلة

الاستخدام الأساسي

SELECT moduloLegacy(10, 3)
1

moduloOrNull

أُضيف في: v25.5.0

يحسب remainder عند قسمة a على b. وهو مشابه للدالة modulo، إلا أن moduloOrNull تُرجع NULL عندما تؤدي العملية، لولا ذلك، إلى حدوث استثناء فاصلة عائمة. وبالنسبة إلى معاملات الفاصلة العائمة، لا يحدث هذا إلا عندما يكون المقسوم عليه 0؛ أما بالنسبة إلى المعاملات الصحيحة، فيشمل ذلك أيضاً باقي قسمة أصغر قيمة سالبة على -1 (مثل -128 % -1 في Int8).

البنية

moduloOrNull(x, y)

الأسماء البديلة: modOrNull

الوسيطات

القيمة المُعادة

تعيد ناتج باقي قسمة x على y، أو NULL عندما تؤدي العملية إلى حدوث استثناء فاصلة عائمة: عندما يكون المقسوم عليه صفراً، أو، بالنسبة إلى الوسيطات الصحيحة، عند حساب أصغر قيمة سالبة بتطبيق modulo على -1.

أمثلة

moduloOrNull عندما يكون المقسوم عليه صفراً

SELECT moduloOrNull(5, 0)
\N

moduloOrNull عند قسمة أصغر عدد صحيح سالب على -1

SELECT moduloOrNull(toInt8(-128), toInt8(-1))
\N

moduloOrZero

استُحدثت في: v20.3.0

تشبه modulo، لكنها تُرجع صفرًا عندما يكون القاسم صفرًا، بدلًا من إرجاع استثناء كما في الدالة modulo.

البنية

moduloOrZero(a, b)

الوسيطات

القيمة المعادة

ترجع باقي قسمة a % b، أو 0 إذا كان المقسوم عليه 0.

أمثلة

مثال على الاستخدام

SELECT moduloOrZero(5, 0)
0

multiply

متوفرة منذ: v1.1.0

يحسب حاصل ضرب القيمتين x وy.

الصيغة

multiply(x, y)

المعاملات

القيمة المُعادة

يعيد ناتج ضرب x في y

أمثلة

ضرب عددين

SELECT multiply(5,5)
25

multiplyDecimal

أُضيف في: v22.12.0

يُجري عملية ضرب على عددين من النوع Decimal. ستكون قيمة النتيجة من النوع Decimal256. يمكن تحديد مقياس النتيجة صراحةً باستخدام الوسيط result_scale (عدد صحيح ثابت ضمن النطاق [0, 76]). وإذا لم يُحدَّد، فسيكون مقياس النتيجة هو أكبر مقياس بين الوسيطات المُعطاة.

البنية

multiplyDecimal(a, b[, result_scale])

وسيطات الدالة

  • a — القيمة الأولى. Decimal
  • b — القيمة الثانية. Decimal
  • result_scale — عدد المنازل العشرية في النتيجة. (U)Int*

القيمة المعادة

ناتج الضرب بعدد المنازل العشرية المحدد. النوع: Decimal256

أمثلة

مثال على الاستخدام

SELECT multiplyDecimal(toDecimal256(-12, 0), toDecimal32(-2.1, 1), 1)
25.2

الاختلاف عن الضرب العادي

SELECT multiply(toDecimal64(-12.647, 3), toDecimal32(2.1239, 4));
SELECT multiplyDecimal(toDecimal64(-12.647, 3), toDecimal32(2.1239, 4));
┌─multiply(toDecimal64(-12.647, 3), toDecimal32(2.1239, 4))─┐
│                                               -26.8609633 │
└───────────────────────────────────────────────────────────┘
┌─multiplyDecimal(toDecimal64(-12.647, 3), toDecimal32(2.1239, 4))─┐
│                                                         -26.8609 │
└──────────────────────────────────────────────────────────────────┘

لا يحدث فيض مع multiplyDecimal

SELECT
    toDecimal64(-12.647987876, 9) AS a,
    toDecimal64(123.967645643, 9) AS b,
    multiplyDecimal(a, b);
┌─────────────a─┬─────────────b─┬─multiplyDecimal(a, b)─┐
│ -12.647987876 │ 123.967645643 │       -1567.941279108 │
└───────────────┴───────────────┴───────────────────────┘

فيض Decimal مع الضرب العادي

SELECT
    toDecimal64(-12.647987876, 9) AS a,
    toDecimal64(123.967645643, 9) AS b,
    a * b;
Received exception:
Code: 407. DB::Exception: Decimal math overflow. (DECIMAL_OVERFLOW)

negate

تمت إضافته في: v1.1.0

يُرجِع نفي الوسيطة x. وتكون النتيجة دائمًا من نوع موقَّع.

الصيغة

negate(x)

الوسائط

  • x — القيمة المطلوب عكس إشارتها.

القيمة المعادة

يُرجع القيمة -x عند إدخال x

أمثلة

مثال على الاستخدام

SELECT negate(10)
-10

plus

أُضيفت في: v1.1.0

تحسب مجموع القيمتين x وy. الاسم البديل: x + y (المعامل). يمكن أيضًا جمع عدد صحيح مع تاريخ أو تاريخ مع وقت. تزيد العملية الأولى عدد الأيام في التاريخ، بينما تزيد العملية الثانية عدد الثواني في التاريخ مع الوقت. ويمكن أيضًا جمع تاريخ ووقت. تؤدي إضافة Date وTime إلى إنتاج DateTime. كما تؤدي إضافة Date وTime64، أو Date32 و Time أو Time64، إلى إنتاج DateTime64.

الصياغة

plus(x, y)

المعاملات

  • x — المعامل في الطرف الأيسر. - y — المعامل في الطرف الأيمن.

القيمة المُعادة

تُرجع مجموع x و y

أمثلة

جمع عددين

SELECT plus(5,5)
10

إضافة عدد صحيح إلى تاريخ

SELECT plus(toDate('2025-01-01'),5)
2025-01-06

إضافة تاريخ ووقت

SELECT toDate('2025-01-01') + CAST('14:30:25', 'Time')
2025-01-01 14:30:25

positiveModulo

أُضيفت في: v22.11.0

تحسب الباقي عند قسمة x على y. وهي مشابهة للدالة modulo، إلا أن positiveModulo تعيد دائمًا عددًا غير سالب.

الصيغة

positiveModulo(x, y)

الأسماء البديلة: positive_modulo, pmod

الوسيطات

القيمة المُعادة

تعيد الفرق بين x وأكبر عدد صحيح لا يتجاوز x ويقبل القسمة على y.

أمثلة

مثال على الاستخدام

SELECT positiveModulo(-1, 10)
9

positiveModuloOrNull

تم تقديمها في: v25.5.0

تحسب الباقي عند قسمة a على b. وهي مشابهة للدالة positiveModulo، باستثناء أن positiveModuloOrNull تُرجِع NULL عندما كانت العملية ستؤدي، لولا ذلك، إلى استثناء فاصلة عائمة. وبالنسبة إلى الوسائط ذات الفاصلة العائمة، لا يحدث هذا إلا عندما يكون المقسوم عليه 0؛ أما بالنسبة إلى الوسائط الصحيحة، فإنه يشمل أيضاً القيمة السالبة الدنيا modulo -1 (مثل -128 % -1 بالنسبة إلى Int8).

البنية

positiveModuloOrNull(x, y)

الأسماء البديلة: positive_modulo_or_null, pmodOrNull

الوسيطات

القيمة المُعادة

تعيد الفرق بين x وأقرب عدد صحيح لا يزيد عن x ويقبل القسمة على y، أو NULL إذا كانت العملية ستؤدي إلى استثناء فاصلة عائمة: عندما يكون المقسوم عليه صفراً، أو، بالنسبة إلى الوسائط الصحيحة، عند حساب أصغر قيمة سالبة بترديد -1.

أمثلة

positiveModuloOrNull على الصفر

SELECT positiveModuloOrNull(5, 0)
\N

positiveModuloOrNull لأصغر عدد صحيح سالب مع -1

SELECT positiveModuloOrNull(toInt8(-128), toInt8(-1))
\N

sqr

تم تقديمه في: v26.7.0

يحسب مربع القيمة x.

البنية

sqr(x)

الوسيطات

القيمة المُعادة

تعيد ناتج ضرب x في نفسه.

أمثلة

تربيع عدد

SELECT sqr(5)
25
Navigation