> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-8c05c8a2.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> توثيق الدوال الحسابية

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

<div id="overview">
  ## نظرة عامة
</div>

تعمل الدوال الحسابية على أي معاملين من النوع `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) باعتبارها أكبر نوع
للأعداد الصحيحة.

مثال:

```sql theme={null}
SELECT toTypeName(0), toTypeName(0 + 0), toTypeName(0 + 0 + 0), toTypeName(0 + 0 + 0 + 0)
```

```text theme={null}
┌─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++.

{/*AUTOGENERATED_START*/}

<div id="abs">
  ## abs
</div>

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

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

**البنية**

```sql theme={null}
abs(x)
```

**الوسائط**

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

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

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

**أمثلة**

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

```sql title=Query theme={null}
SELECT abs(-0.5)
```

```response title=Response theme={null}
0.5
```

<div id="avg2">
  ## avg2
</div>

أُضيف في: v25.11.0

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

**البنية**

```sql theme={null}
avg2(x1, x2])
```

**الوسائط**

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

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

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

**أمثلة**

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

```sql title=Query theme={null}
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.
```

```response title=Response theme={null}
┌─result─┬─type────┐
│      2 │ Float64 │
└────────┴─────────┘
```

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

```sql title=Query theme={null}
SELECT avg2(toDecimal32(1, 2), 2) AS result, toTypeName(result) AS type;
```

```response title=Response theme={null}
┌─result─┬─type──────────┐
│    1.5 │ Decimal(9, 2) │
└────────┴───────────────┘
```

**أنواع Date**

```sql title=Query theme={null}
SELECT avg2(toDate('2025-01-01'), toDate('2025-01-05')) AS result, toTypeName(result) AS type;
```

```response title=Response theme={null}
┌─────result─┬─type─┐
│ 2025-01-03 │ Date │
└────────────┴──────┘
```

**أنواع DateTime**

```sql title=Query theme={null}
SELECT avg2(toDateTime('2025-01-01 00:00:00'), toDateTime('2025-01-03 12:00:00')) AS result, toTypeName(result) AS type;
```

```response title=Response theme={null}
┌──────────────result─┬─type─────┐
│ 2025-01-02 06:00:00 │ DateTime │
└─────────────────────┴──────────┘
```

**أنواع Time64**

```sql title=Query theme={null}
SELECT avg2(toTime64('12:00:00', 0), toTime64('14:00:00', 0)) AS result, toTypeName(result) AS type;
```

```response title=Response theme={null}
┌───result─┬─type──────┐
│ 13:00:00 │ Time64(0) │
└──────────┴───────────┘
```

<div id="byteSwap">
  ## byteSwap
</div>

طُرحت في: v23.10.0

تعكس هذه الدالة بايتات عدد صحيح، أي تغيّر [ترتيب البايتات](https://en.wikipedia.org/wiki/Endianness) الخاص به.

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

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:

```result theme={null}
┌─toIPv4(byteSwap(toUInt32(toIPv4('205.251.199.199'))))─┐
│ 199.199.251.205                                       │
└───────────────────────────────────────────────────────┘
```

**الصيغة**

```sql theme={null}
byteSwap(x)
```

**المعاملات**

* `x` — قيمة عدد صحيح. [`(U)Int*`](/ar/reference/data-types/int-uint)

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

تُرجع `x` بعد عكس ترتيب البايتات. [`(U)Int*`](/ar/reference/data-types/int-uint)

**أمثلة**

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

```sql title=Query theme={null}
SELECT byteSwap(3351772109)
```

```response title=Response theme={null}
3455829959
```

**8-بت**

```sql title=Query theme={null}
SELECT byteSwap(54)
```

```response title=Response theme={null}
54
```

**16 بت**

```sql title=Query theme={null}
SELECT byteSwap(4135)
```

```response title=Response theme={null}
10000
```

**32 بت**

```sql title=Query theme={null}
SELECT byteSwap(3351772109)
```

```response title=Response theme={null}
3455829959
```

**64 بت**

```sql title=Query theme={null}
SELECT byteSwap(123294967295)
```

```response title=Response theme={null}
18439412204227788800
```

<div id="divide">
  ## divide
</div>

أُضيف في: v1.1.0

يحسب ناتج قسمة القيمتين `a` و`b`. ويكون نوع النتيجة دائمًا [Float64](/ar/reference/data-types/float).
وتوفّر الدالة `intDiv` القسمة الصحيحة.

<Note>
  تؤدي القسمة على `0` إلى إرجاع `inf` أو `-inf` أو `nan`.
</Note>

**البنية**

```sql theme={null}
divide(x, y)
```

**المعاملات**

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

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

ناتج قسمة x على y

**أمثلة**

**قسمة عددين**

```sql title=Query theme={null}
SELECT divide(25,5) AS quotient, toTypeName(quotient)
```

```response title=Response theme={null}
5 Float64
```

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

```sql title=Query theme={null}
SELECT divide(25,0)
```

```response title=Response theme={null}
inf
```

<div id="divideDecimal">
  ## divideDecimal
</div>

متاح منذ: v22.12.0

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

<Note>
  تعمل هذه الدالة بسرعة أبطأ بكثير من `divide` الاعتيادية.
  إذا لم تكن بحاجة فعلًا إلى دقة مضبوطة و/أو كنت تحتاج إلى حساب سريع، ففكّر في استخدام [divide](#divide).
</Note>

**الصياغة**

```sql theme={null}
divideDecimal(x, y[, result_scale])
```

**الوسائط**

* `x` — القيمة الأولى: [Decimal](/ar/reference/data-types/decimal). - `y` — القيمة الثانية: [Decimal](/ar/reference/data-types/decimal). - `result_scale` — مقياس النتيجة. النوع [Int/UInt](/ar/reference/data-types/int-uint).

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

ناتج القسمة بالمقياس المحدد. [`Decimal256`](/ar/reference/data-types/decimal)

**أمثلة**

**مثال 1**

```sql title=Query theme={null}
divideDecimal(toDecimal256(-12, 0), toDecimal32(2.1, 1), 10)
```

```response title=Response theme={null}
┌─divideDecimal(toDecimal256(-12, 0), toDecimal32(2.1, 1), 10)─┐
│                                                -5.7142857142 │
└──────────────────────────────────────────────────────────────┘
```

**مثال 2**

```sql title=Query theme={null}
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);
```

```response title=Response theme={null}
┌─divide(toDecimal64(-12, 1), toDecimal32(2.1, 1))─┐
│                                             -5.7 │
└──────────────────────────────────────────────────┘
┌───a─┬───b─┬─divideDecimal(toDecimal64(-12, 1), toDecimal32(2.1, 1), 1)─┬─divideDecimal(toDecimal64(-12, 1), toDecimal32(2.1, 1), 5)─┐
│ -12 │ 2.1 │                                                       -5.7 │                                                   -5.71428 │
└─────┴─────┴────────────────────────────────────────────────────────────┴────────────────────────────────────────────────────────────┘
```

<div id="divideOrNull">
  ## divideOrNull
</div>

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

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

**الصياغة**

```sql theme={null}
divideOrNull(x, y)
```

**الوسيطات**

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

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

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

**أمثلة**

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

```sql title=Query theme={null}
SELECT divideOrNull(25, 0)
```

```response title=Response theme={null}
\N
```

<div id="gcd">
  ## gcd
</div>

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

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

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

**البنية**

```sql theme={null}
gcd(x, y)
```

**الوسيطات**

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

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

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

**أمثلة**

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

```sql title=Query theme={null}
SELECT gcd(12, 18)
```

```response title=Response theme={null}
6
```

<div id="ifNotFinite">
  ## ifNotFinite
</div>

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

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

يمكنك الحصول على نتيجة مماثلة باستخدام [المعامل الثلاثي](/ar/reference/functions/regular-functions/conditional-functions#if): `isFinite(x) ? x : y`.

**الصيغة**

```sql theme={null}
ifNotFinite(x,y)
```

**الوسائط**

* `x` — القيمة المراد التحقق مما إذا كانت لا نهائية. [`Float*`](/ar/reference/data-types/float)
* `y` — القيمة البديلة. [`Float*`](/ar/reference/data-types/float)

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

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

**أمثلة**

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

```sql title=Query theme={null}
SELECT 1/0 AS infimum, ifNotFinite(infimum,42)
```

```response title=Response theme={null}
inf  42
```

<div id="intDiv">
  ## intDiv
</div>

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

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

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

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

**الصياغة**

```sql theme={null}
intDiv(x, y)
```

**الوسيطات**

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

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

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

**أمثلة**

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

```sql title=Query theme={null}
SELECT intDiv(toFloat64(1), 0.001) AS res, toTypeName(res)
```

```response title=Response theme={null}
┌──res─┬─toTypeName(intDiv(toFloat64(1), 0.001))─┐
│ 1000 │ Int64                                   │
└──────┴─────────────────────────────────────────┘
```

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

```sql title=Query theme={null}
SELECT
intDiv(1, 0.001) AS res,
toTypeName(res)
```

```response title=Response theme={null}
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)
```

<div id="intDivOrNull">
  ## intDivOrNull
</div>

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

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

**الصياغة**

```sql theme={null}
intDivOrNull(x, y)
```

**الوسيطات**

* `x` — المعامل الأيسر. [`(U)Int*`](/ar/reference/data-types/int-uint)
* `y` — المعامل الأيمن. [`(U)Int*`](/ar/reference/data-types/int-uint)

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

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

**أمثلة**

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

```sql title=Query theme={null}
SELECT intDivOrNull(1, 0)
```

```response title=Response theme={null}
\N
```

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

```sql title=Query theme={null}
SELECT intDivOrNull(-9223372036854775808, -1)
```

```response title=Response theme={null}
\N
```

<div id="intDivOrZero">
  ## intDivOrZero
</div>

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

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

**البنية**

```sql theme={null}
intDivOrZero(a, b)
```

**المعاملات**

* `a` — المعامل الأيسر. [`(U)Int*`](/ar/reference/data-types/int-uint)
* `b` — المعامل الأيمن. [`(U)Int*`](/ar/reference/data-types/int-uint)

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

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

**أمثلة**

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

```sql title=Query theme={null}
SELECT intDivOrZero(1, 0)
```

```response title=Response theme={null}
0
```

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

```sql title=Query theme={null}
SELECT intDivOrZero(0.05, -1)
```

```response title=Response theme={null}
0
```

<div id="isFinite">
  ## isFinite
</div>

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

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

**البنية**

```sql theme={null}
isFinite(x)
```

**الوسيطات**

* `x` — العدد المراد التحقق مما إذا كان متناهيًا. [`Float*`](/ar/reference/data-types/float) أو [`BFloat16`](/ar/reference/data-types/float)

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

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

**أمثلة**

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

```sql title=Query theme={null}
SELECT isFinite(inf)
```

```response title=Response theme={null}
0
```

<div id="isInfinite">
  ## isInfinite
</div>

أُضيف في: v1.1.0

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

**البنية**

```sql theme={null}
isInfinite(x)
```

**الوسيطات**

* `x` — العدد المراد التحقق مما إذا كان لا نهائيًا. [`Float*`](/ar/reference/data-types/float) أو [`BFloat16`](/ar/reference/data-types/float)

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

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

**أمثلة**

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

```sql title=Query theme={null}
SELECT isInfinite(inf), isInfinite(NaN), isInfinite(10))
```

```response title=Response theme={null}
1 0 0
```

<div id="isNaN">
  ## isNaN
</div>

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

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

**الصياغة**

```sql theme={null}
isNaN(x)
```

**الوسائط**

* `x` — الوسيط المطلوب التحقق مما إذا كانت قيمته `NaN`. [`Float*`](/ar/reference/data-types/float) أو [`BFloat16`](/ar/reference/data-types/float)

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

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

**أمثلة**

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

```sql title=Query theme={null}
SELECT isNaN(NaN)
```

```response title=Response theme={null}
1
```

<div id="lcm">
  ## lcm
</div>

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

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

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

**البنية**

```sql theme={null}
lcm(x, y)
```

**المعاملات**

* `x` — العدد الصحيح الأول. [`(U)Int*`](/ar/reference/data-types/int-uint)
* `y` — العدد الصحيح الثاني. [`(U)Int*`](/ar/reference/data-types/int-uint)

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

يعيد المضاعف المشترك الأصغر لـ `x` و`y`. [`(U)Int*`](/ar/reference/data-types/int-uint)

**أمثلة**

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

```sql title=Query theme={null}
SELECT lcm(6, 8)
```

```response title=Response theme={null}
24
```

<div id="max2">
  ## max2
</div>

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

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

**الصيغة**

```sql theme={null}
max2(x, y)
```

**الوسيطات**

* `x` — القيمة الأولى [`(U)Int8/16/32/64`](/ar/reference/data-types/int-uint) أو [`Float*`](/ar/reference/data-types/float) أو [`Decimal`](/ar/reference/data-types/decimal)
* `y` — القيمة الثانية [`(U)Int8/16/32/64`](/ar/reference/data-types/int-uint) أو [`Float*`](/ar/reference/data-types/float) أو [`Decimal`](/ar/reference/data-types/decimal)

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

تُرجِع أكبر القيمتين `x` و`y`. [`Float64`](/ar/reference/data-types/float)

**أمثلة**

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

```sql title=Query theme={null}
SELECT max2(-1, 2)
```

```response title=Response theme={null}
2
```

<div id="midpoint">
  ## midpoint
</div>

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

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

**البنية**

```sql theme={null}
midpoint(x1[, x2, ...])
```

**الوسائط**

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

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

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

**أمثلة**

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

```sql title=Query theme={null}
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.
```

```response title=Response theme={null}
┌─result─┬─type────┐
│    1.5 │ Float64 │
└────────┴─────────┘
```

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

```sql title=Query theme={null}
SELECT midpoint(toDecimal32(1.5, 2), toDecimal32(1, 1), 2) AS result, toTypeName(result) AS type;
```

```response title=Response theme={null}
┌─result─┬─type──────────┐
│    1.5 │ Decimal(9, 2) │
└────────┴───────────────┘
```

**أنواع Date**

```sql title=Query theme={null}
SELECT midpoint(toDate('2025-01-01'), toDate('2025-01-05')) AS result, toTypeName(result) AS type;
```

```response title=Response theme={null}
┌─────result─┬─type─┐
│ 2025-01-03 │ Date │
└────────────┴──────┘
```

**أنواع DateTime**

```sql title=Query theme={null}
SELECT midpoint(toDateTime('2025-01-01 00:00:00'), toDateTime('2025-01-03 12:00:00')) AS result, toTypeName(result) AS type;
```

```response title=Response theme={null}
┌──────────────result─┬─type─────┐
│ 2025-01-02 06:00:00 │ DateTime │
└─────────────────────┴──────────┘
```

**أنواع Time64**

```sql title=Query theme={null}
SELECT midpoint(toTime64('12:00:00', 0), toTime64('14:00:00', 0)) AS result, toTypeName(result) AS type;
```

```response title=Response theme={null}
┌───result─┬─type──────┐
│ 13:00:00 │ Time64(0) │
└──────────┴───────────┘
```

<div id="min2">
  ## min2
</div>

أُضيف في: v21.11.0

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

**الصيغة**

```sql theme={null}
min2(x, y)
```

**الوسيطات**

* `x` — القيمة الأولى من النوع [`(U)Int8/16/32/64`](/ar/reference/data-types/int-uint) أو [`Float*`](/ar/reference/data-types/float) أو [`Decimal`](/ar/reference/data-types/decimal)
* `y` — القيمة الثانية من النوع [`(U)Int8/16/32/64`](/ar/reference/data-types/int-uint) أو [`Float*`](/ar/reference/data-types/float) أو [`Decimal`](/ar/reference/data-types/decimal)

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

تعيد أصغر القيمتين `x` و`y`. [`Float64`](/ar/reference/data-types/float)

**أمثلة**

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

```sql title=Query theme={null}
SELECT min2(-1, 2)
```

```response title=Response theme={null}
-1
```

<div id="minus">
  ## minus
</div>

أُضيف في: v1.1.0

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

**البنية**

```sql theme={null}
minus(x, y)
```

**الوسيطات**

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

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

x ناقص y

**أمثلة**

**طرح عددين**

```sql title=Query theme={null}
SELECT minus(10, 5)
```

```response title=Response theme={null}
5
```

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

```sql title=Query theme={null}
SELECT minus(toDate('2025-01-01'),5)
```

```response title=Response theme={null}
2024-12-27
```

<div id="modulo">
  ## modulo
</div>

أُضيف في: v1.1.0

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

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

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

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

**البنية**

```sql theme={null}
modulo(a, b)
```

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

**الوسائط**

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

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

الباقي من a % b

**أمثلة**

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

```sql title=Query theme={null}
SELECT modulo(5, 2)
```

```response title=Response theme={null}
1
```

<div id="moduloLegacy">
  ## moduloLegacy
</div>

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

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

**الصياغة**

```sql theme={null}
moduloLegacy(a, b)
```

**الوسيطات**

* `a` — المقسوم. [`(U)Int*`](/ar/reference/data-types/int-uint) أو [`Float*`](/ar/reference/data-types/float)
* `b` — المقسوم عليه. [`(U)Int*`](/ar/reference/data-types/int-uint) أو [`Float*`](/ar/reference/data-types/float)

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

تعيد ناتج باقي القسمة. [`(U)Int*`](/ar/reference/data-types/int-uint) أو [`Float*`](/ar/reference/data-types/float)

**أمثلة**

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

```sql title=Query theme={null}
SELECT moduloLegacy(10, 3)
```

```response title=Response theme={null}
1
```

<div id="moduloOrNull">
  ## moduloOrNull
</div>

أُضيف في: v25.5.0

يحسب remainder عند قسمة `a` على `b`. وهو مشابه للدالة `modulo`، إلا أن `moduloOrNull` تُرجع NULL
إذا كانت الوسيطة اليمنى تساوي 0.

**البنية**

```sql theme={null}
moduloOrNull(x, y)
```

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

**المعاملات**

* `x` — المقسوم. [`(U)Int*`](/ar/reference/data-types/int-uint) أو [`Float*`](/ar/reference/data-types/float)
* `y` — القاسم (`modulus`). [`(U)Int*`](/ar/reference/data-types/int-uint) أو [`Float*`](/ar/reference/data-types/float)

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

تعيد ناتج باقي قسمة `x` على `y`، أو `NULL` إذا كان القاسم صفراً.

**أمثلة**

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

```sql title=Query theme={null}
SELECT moduloOrNull(5, 0)
```

```response title=Response theme={null}
\N
```

<div id="moduloOrZero">
  ## moduloOrZero
</div>

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

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

**البنية**

```sql theme={null}
moduloOrZero(a, b)
```

**الوسيطات**

* `a` — المقسوم. [`(U)Int*`](/ar/reference/data-types/int-uint) أو [`Float*`](/ar/reference/data-types/float)
* `b` — المقسوم عليه (modulus). [`(U)Int*`](/ar/reference/data-types/int-uint) أو [`Float*`](/ar/reference/data-types/float)

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

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

**أمثلة**

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

```sql title=Query theme={null}
SELECT moduloOrZero(5, 0)
```

```response title=Response theme={null}
0
```

<div id="multiply">
  ## multiply
</div>

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

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

**الصيغة**

```sql theme={null}
multiply(x, y)
```

**المعاملات**

* `x` — عامل. [`(U)Int*`](/ar/reference/data-types/int-uint) أو [`Float*`](/ar/reference/data-types/float) أو [`Decimal`](/ar/reference/data-types/decimal)
* `y` — عامل. [`(U)Int*`](/ar/reference/data-types/int-uint) أو [`Float*`](/ar/reference/data-types/float) أو [`Decimal`](/ar/reference/data-types/decimal)

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

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

**أمثلة**

**ضرب عددين**

```sql title=Query theme={null}
SELECT multiply(5,5)
```

```response title=Response theme={null}
25
```

<div id="multiplyDecimal">
  ## multiplyDecimal
</div>

أُضيف في: v22.12.0

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

<Note>
  تعمل هذه الدوال أبطأ بكثير من `multiply` العادية.
  إذا لم تكن بحاجة فعلًا إلى دقة مضبوطة و/أو كنت تحتاج إلى حسابات سريعة، ففكّر في استخدام [multiply](#multiply)
</Note>

**البنية**

```sql theme={null}
multiplyDecimal(a, b[, result_scale])
```

**المعاملات**

* `a` — القيمة الأولى. [`Decimal`](/ar/reference/data-types/decimal)
* `b` — القيمة الثانية. [`Decimal`](/ar/reference/data-types/decimal)
* `result_scale` — عدد المنازل العشرية في النتيجة. [`(U)Int*`](/ar/reference/data-types/int-uint)

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

ناتج الضرب بعدد المنازل العشرية المحدد. النوع: [`Decimal256`](/ar/reference/data-types/decimal)

**أمثلة**

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

```sql title=Query theme={null}
SELECT multiplyDecimal(toDecimal256(-12, 0), toDecimal32(-2.1, 1), 1)
```

```response title=Response theme={null}
25.2
```

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

```sql title=Query theme={null}
SELECT multiplyDecimal(toDecimal256(-12, 0), toDecimal32(-2.1, 1), 1)
```

```response title=Response theme={null}
┌─multiply(toDecimal64(-12.647, 3), toDecimal32(2.1239, 4))─┐
│                                               -26.8609633 │
└───────────────────────────────────────────────────────────┘
┌─multiplyDecimal(toDecimal64(-12.647, 3), toDecimal32(2.1239, 4))─┐
│                                                         -26.8609 │
└──────────────────────────────────────────────────────────────────┘
```

**فيض Decimal**

```sql title=Query theme={null}
SELECT
    toDecimal64(-12.647987876, 9) AS a,
    toDecimal64(123.967645643, 9) AS b,
    multiplyDecimal(a, b);
SELECT
    toDecimal64(-12.647987876, 9) AS a,
    toDecimal64(123.967645643, 9) AS b,
    a * b;
```

```response title=Response theme={null}
┌─────────────a─┬─────────────b─┬─multiplyDecimal(toDecimal64(-12.647987876, 9), toDecimal64(123.967645643, 9))─┐
│ -12.647987876 │ 123.967645643 │                                                               -1567.941279108 │
└───────────────┴───────────────┴───────────────────────────────────────────────────────────────────────────────┘
Received exception from server (version 22.11.1):
Code: 407. DB::Exception: Received from localhost:9000. DB::Exception: Decimal math overflow:
While processing toDecimal64(-12.647987876, 9) AS a, toDecimal64(123.967645643, 9) AS b, a * b. (DECIMAL_OVERFLOW)
```

<div id="negate">
  ## negate
</div>

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

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

**الصيغة**

```sql theme={null}
negate(x)
```

**الوسائط**

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

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

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

**أمثلة**

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

```sql title=Query theme={null}
SELECT negate(10)
```

```response title=Response theme={null}
-10
```

<div id="plus">
  ## plus
</div>

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

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

**الصياغة**

```sql theme={null}
plus(x, y)
```

**المعاملات**

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

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

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

**أمثلة**

**جمع عددين**

```sql title=Query theme={null}
SELECT plus(5,5)
```

```response title=Response theme={null}
10
```

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

```sql title=Query theme={null}
SELECT plus(toDate('2025-01-01'),5)
```

```response title=Response theme={null}
2025-01-06
```

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

```sql title=Query theme={null}
SELECT toDate('2025-01-01') + CAST('14:30:25', 'Time')
```

```response title=Response theme={null}
2025-01-01 14:30:25
```

<div id="positiveModulo">
  ## positiveModulo
</div>

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

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

**الصيغة**

```sql theme={null}
positiveModulo(x, y)
```

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

**الوسيطات**

* `x` — المقسوم. [`(U)Int*`](/ar/reference/data-types/int-uint) أو [`Float*`](/ar/reference/data-types/float) أو [`Decimal`](/ar/reference/data-types/decimal)
* `y` — القاسم (المعامل). [`(U)Int*`](/ar/reference/data-types/int-uint) أو [`Float*`](/ar/reference/data-types/float) أو [`Decimal`](/ar/reference/data-types/decimal)

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

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

**أمثلة**

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

```sql title=Query theme={null}
SELECT positiveModulo(-1, 10)
```

```response title=Response theme={null}
9
```

<div id="positiveModuloOrNull">
  ## positiveModuloOrNull
</div>

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

تحسب الباقي عند قسمة `a` على `b`. وهي مشابهة للدالة `positiveModulo`، باستثناء أن `positiveModuloOrNull` تُرجِع NULL
إذا كان المعامل الأيمن يساوي 0.

**الصياغة**

```sql theme={null}
positiveModuloOrNull(x, y)
```

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

**الوسائط**

* `x` — المقسوم. [`(U)Int*`](/ar/reference/data-types/int-uint)/[`Float32/64`](/ar/reference/data-types/float). - `x` — القاسم (modulus). [`(U)Int*`](/ar/reference/data-types/int-uint)/[`Float32/64`](/ar/reference/data-types/float).

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

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

**أمثلة**

**positiveModuloOrNull**

```sql title=Query theme={null}
SELECT positiveModuloOrNull(5, 0)
```

```response title=Response theme={null}
\N
```
