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

> توثيق دوال التشفير

# دوال التشفير

{/*AUTOGENERATED_START*/}

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

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

يفكّ ترميز سلسلة عنوان Bech32 التي أُنشئت باستخدام إحدى خوارزميتي bech32 أو bech32m.

<Note>
  على عكس دالة الترميز، يتعامل `bech32Decode` تلقائيًا مع FixedStrings ذات الحشو.
</Note>

**البنية**

```sql theme={null}
bech32Decode(address[, 'raw'])
```

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

* `address` — سلسلة Bech32 المطلوب فك ترميزها. [`String`](/ar/reference/data-types/string) أو [`FixedString`](/ar/reference/data-types/fixedstring)
* `mode` — اختياري. مرّر `'raw'` لفك الترميز من دون إزالة البايت الأول باعتباره إصدار الشاهد. استخدم هذا مع العناوين غير التابعة لـ SegWit (مثل Cosmos SDK). [`String`](/ar/reference/data-types/string)

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

يعيد `Tuple` يتكوّن من `(hrp, data)` استُخدم في ترميز السلسلة. تكون البيانات بتنسيق ثنائي. [`Tuple(String, String)`](/ar/reference/data-types/tuple)

**أمثلة**

**فك ترميز العنوان**

```sql title=Query theme={null}
SELECT tup.1 AS hrp, hex(tup.2) AS data FROM (SELECT bech32Decode('bc1w508d6qejxtdg4y5r3zarvary0c5xw7kj7gz7z') AS tup)
```

```response title=Response theme={null}
bc   751E76E8199196D454941C45D1B3A323F1433BD6
```

**عنوان الشبكة التجريبية**

```sql title=Query theme={null}
SELECT tup.1 AS hrp, hex(tup.2) AS data FROM (SELECT bech32Decode('tb1w508d6qejxtdg4y5r3zarvary0c5xw7kzp034v') AS tup)
```

```response title=Response theme={null}
tb   751E76E8199196D454941C45D1B3A323F1433BD6
```

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

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

تُشفِّر سلسلة بيانات ثنائية، إلى جانب الجزء المقروء بشريًا (HRP)، باستخدام خوارزميات [Bech32 or Bech32m](https://en.bitcoin.it/wiki/Bech32).

<Note>
  عند استخدام نوع البيانات [`FixedString`](/ar/reference/data-types/fixedstring)، إذا كانت القيمة لا تملأ الحقل بالكامل، فستُحشى بمحارف null.
  وبينما تتعامل الدالة `bech32Encode` مع هذا تلقائيًا بالنسبة إلى الوسيط hrp، يجب ألا تكون القيم في الوسيط data محشوة.
  لهذا السبب، لا يُنصح باستخدام نوع البيانات [`FixedString`](/ar/reference/data-types/fixedstring) لقيم بياناتك إلا إذا كنت
  متأكدًا من أن أطوالها جميعًا متساوية، وأن عمود `FixedString` لديك مضبوط على هذا الطول أيضًا.
</Note>

**البنية**

```sql theme={null}
bech32Encode(hrp, data[, witver | 'bech32' | 'bech32m'])
```

**الوسائط**

* `hrp` — سلسلة `String` تتكوّن من `1 - 83` حرفًا صغيرًا وتحدّد "الجزء المقروء بشريًا" من الشيفرة. تكون عادةً 'bc' أو 'tb'. [`String`](/ar/reference/data-types/string) أو [`FixedString`](/ar/reference/data-types/fixedstring)
* `data` — سلسلة `String` من البيانات الثنائية المطلوب ترميزها. [`String`](/ar/reference/data-types/string) أو [`FixedString`](/ar/reference/data-types/fixedstring)
* `witver_or_variant` — اختياري. إمّا إصدار شاهد من نوع UInt\* (القيمة الافتراضية = 1، و`0` لـ Bech32، و`1`+ لـ Bech32m) أو صيغة ترميز من نوع String: `'bech32'` ‏(BIP173) أو `'bech32m'` ‏(BIP350). عند استخدام صيغة نصية، لا يُضاف بايت إصدار الشاهد في البداية — وهذا مطلوب للعناوين غير التابعة لـ SegWit مثل Cosmos SDK. [`UInt*`](/ar/reference/data-types/int-uint) أو [`String`](/ar/reference/data-types/string)

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

تعيد سلسلة عنوان Bech32 تتكوّن من الجزء المقروء بشريًا، ومحرف فاصل يكون دائمًا '1'، وجزء بيانات. لن يتجاوز طول السلسلة 90 حرفًا. وإذا تعذّر على الخوارزمية إنشاء عنوان صالح من المُدخلات، فستُعيد سلسلة فارغة. [`String`](/ar/reference/data-types/string)

**أمثلة**

**Bech32m الافتراضي**

```sql title=Query theme={null}
-- When no witness version is supplied, the default is 1, the updated Bech32m algorithm.
SELECT bech32Encode('bc', unhex('751e76e8199196d454941c45d1b3a323f1433bd6'))
```

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

**خوارزمية Bech32**

```sql title=Query theme={null}
-- A witness version of 0 will result in a different address string.
SELECT bech32Encode('bc', unhex('751e76e8199196d454941c45d1b3a323f1433bd6'), 0)
```

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

**HRP مخصّص**

```sql title=Query theme={null}
-- While 'bc' (Mainnet) and 'tb' (Testnet) are the only allowed hrp values for the
-- SegWit address format, Bech32 allows any hrp that satisfies the above requirements.
SELECT bech32Encode('abcdefg', unhex('751e76e8199196d454941c45d1b3a323f1433bd6'), 10)
```

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

**عنوان Cosmos SDK ‏(BIP173، من دون witness version)**

```sql title=Query theme={null}
-- Using 'bech32' variant encodes raw data without a witness version byte,
-- compatible with Cosmos SDK, Injective, Osmosis, and other non-SegWit chains.
SELECT bech32Encode('inj', unhex('751e76e8199196d454941c45d1b3a323f1433bd6'), 'bech32')
```

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

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

أُضيف في: v21.8.0

يعيد سلسلة تحتوي على التمثيل الثنائي للمعامل
وفقًا للمنطق التالي لمختلف الأنواع:

| النوع                      | الوصف                                                                                                                                                                                                                                           |
| -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `(U)Int*`                  | يطبع الأرقام الثنائية من الأكثر أهمية إلى الأقل أهمية (بترتيب big-endian أو بالترتيب "المقروء للبشر"). ويبدأ بأكثر بايت غير صفري أهمية (مع حذف البايتات الصفرية البادئة)، لكنه يطبع دائمًا ثمانية أرقام لكل بايت حتى إذا كان الرقم الأول صفرًا. |
| `Date` and `DateTime`      | يُنسَّق كأعداد صحيحة مقابلة (عدد الأيام منذ epoch بالنسبة إلى Date، وقيمة Unix timestamp بالنسبة إلى DateTime).                                                                                                                                 |
| `String` and `FixedString` | تُشفَّر جميع البايتات ببساطة على هيئة ثمانية أرقام ثنائية. ولا تُحذف البايتات الصفرية.                                                                                                                                                          |
| `Float*` and `Decimal`     | تُشفَّر وفقًا لتمثيلها في الذاكرة. ونظرًا إلى أننا ندعم معمارية little-endian، فهي تُشفَّر بترتيب little-endian. ولا تُحذف البايتات الصفرية البادئة أو اللاحقة.                                                                                 |
| `UUID`                     | يُشفَّر كسلسلة بترتيب big-endian.                                                                                                                                                                                                               |

**الصياغة**

```sql theme={null}
bin(arg)
```

**الوسائط**

* `arg` — قيمة لتحويلها إلى ثنائي. [`String`](/ar/reference/data-types/string) أو [`FixedString`](/ar/reference/data-types/fixedstring) أو [`(U)Int*`](/ar/reference/data-types/int-uint) أو [`Float*`](/ar/reference/data-types/float) أو [`Decimal`](/ar/reference/data-types/decimal) أو [`Date`](/ar/reference/data-types/date) أو [`DateTime`](/ar/reference/data-types/datetime)

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

يعيد سلسلة نصية تحتوي على التمثيل الثنائي للوسيطة. [`String`](/ar/reference/data-types/string)

**أمثلة**

**عدد صحيح بسيط**

```sql title=Query theme={null}
SELECT bin(14)
```

```response title=Response theme={null}
┌─bin(14)──┐
│ 00001110 │
└──────────┘
```

**أرقام Float32**

```sql title=Query theme={null}
SELECT bin(toFloat32(number)) AS bin_presentation FROM numbers(15, 2)
```

```response title=Response theme={null}
┌─bin_presentation─────────────────┐
│ 00000000000000000111000001000001 │
│ 00000000000000001000000001000001 │
└──────────────────────────────────┘
```

**أرقام Float64**

```sql title=Query theme={null}
SELECT bin(toFloat64(number)) AS bin_presentation FROM numbers(15, 2)
```

```response title=Response theme={null}
┌─bin_presentation─────────────────────────────────────────────────┐
│ 0000000000000000000000000000000000000000000000000010111001000000 │
│ 0000000000000000000000000000000000000000000000000011000001000000 │
└──────────────────────────────────────────────────────────────────┘
```

**تحويل معرّف UUID**

```sql title=Query theme={null}
SELECT bin(toUUID('61f0c404-5cb3-11e7-907b-a6006ad3dba0')) AS bin_uuid
```

```response title=Response theme={null}
┌─bin_uuid─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ 01100001111100001100010000000100010111001011001100010001111001111001000001111011101001100000000001101010110100111101101110100000 │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
```

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

أُضيفت في: v21.7.0

تُرجع هذه الدالة مواقع البتات ذات القيمة 1 (بترتيب تصاعدي) في التمثيل الثنائي لعدد صحيح غير موقَّع.
تُحوَّل أعداد الإدخال الصحيحة الموقَّعة أولًا إلى عدد صحيح غير موقَّع.

**البنية**

```sql theme={null}
bitPositionsToArray(arg)
```

**الوسائط**

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

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

تعيد مصفوفة تتضمن مواضع البتات ذات القيمة 1 في التمثيل الثنائي للإدخال، مرتبة ترتيبًا تصاعديًا. [`Array(UInt64)`](/ar/reference/data-types/array)

**أمثلة**

**ضبط بت واحد**

```sql title=Query theme={null}
SELECT bitPositionsToArray(toInt8(1)) AS bit_positions
```

```response title=Response theme={null}
┌─bit_positions─┐
│ [0]           │
└───────────────┘
```

**تعيين جميع البتات**

```sql title=Query theme={null}
SELECT bitPositionsToArray(toInt8(-1)) AS bit_positions
```

```response title=Response theme={null}
┌─bit_positions─────────────┐
│ [0, 1, 2, 3, 4, 5, 6, 7]  │
└───────────────────────────┘
```

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

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

تفكّك هذه الدالة عددًا صحيحًا إلى مجموع قوى العدد اثنين.
وتُعاد قوى العدد اثنين في مصفوفة مرتبة تصاعديًا.

**الصياغة**

```sql theme={null}
bitmaskToArray(num)
```

**الوسائط**

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

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

تعيد مصفوفة تتضمن قوى العدد اثنين المرتبة تصاعديًا والتي يساوي مجموعها عدد الإدخال. [`Array(UInt64)`](/ar/reference/data-types/array)

**أمثلة**

**مثال أساسي**

```sql title=Query theme={null}
SELECT bitmaskToArray(50) AS powers_of_two
```

```response title=Response theme={null}
┌─powers_of_two───┐
│ [2, 16, 32]     │
└─────────────────┘
```

**قيمة واحدة من قوى العدد 2**

```sql title=Query theme={null}
SELECT bitmaskToArray(8) AS powers_of_two
```

```response title=Response theme={null}
┌─powers_of_two─┐
│ [8]           │
└───────────────┘
```

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

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

تشبه bitmaskToArray، لكنها تُرجع قوى العدد اثنين على هيئة سلسلة نصية مفصولة بفواصل.

**البنية**

```sql theme={null}
bitmaskToList(num)
```

**الوسائط**

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

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

يُرجع سلسلة نصية تحتوي على قوى العدد 2 مفصولة بفواصل. [`String`](/ar/reference/data-types/string)

**أمثلة**

**مثال أساسي**

```sql title=Query theme={null}
SELECT bitmaskToList(50) AS powers_list
```

```response title=Response theme={null}
┌─powers_list───┐
│ 2, 16, 32     │
└───────────────┘
```

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

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

يعيد سلسلة نصية بطول يساوي عدد الوسيطات المُمرَّرة، بحيث تكون قيمة كل بايت
هي قيمة الوسيطة المقابلة له. يقبل عدة وسيطات من الأنواع الرقمية.

إذا كانت قيمة الوسيطة خارج نطاق نوع البيانات `UInt8`، فستُحوَّل
إلى `UInt8` مع احتمال حدوث التقريب والتجاوز.

**الصياغة**

```sql theme={null}
char(num1[, num2[, ...]])
```

**الوسائط**

* `num1[, num2[, num3 ...]]` — وسائط رقمية تُفسَّر على أنها أعداد صحيحة. [`(U)Int8/16/32/64`](/ar/reference/data-types/int-uint) أو [`Float*`](/ar/reference/data-types/float)

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

يعيد سلسلة نصية من البايتات المُعطاة. [`String`](/ar/reference/data-types/string)

**أمثلة**

**مثال أساسي**

```sql title=Query theme={null}
SELECT char(104.1, 101, 108.9, 108.9, 111) AS hello;
```

```response title=Response theme={null}
┌─hello─┐
│ hello │
└───────┘
```

**إنشاء ترميزات مخصّصة**

```sql title=Query theme={null}
-- You can construct a string of arbitrary encoding by passing the corresponding bytes.
-- for example UTF8
SELECT char(0xD0, 0xBF, 0xD1, 0x80, 0xD0, 0xB8, 0xD0, 0xB2, 0xD0, 0xB5, 0xD1, 0x82) AS hello;
```

```response title=Response theme={null}
┌─hello──┐
│ привет │
└────────┘
```

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

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

تعيد سلسلة نصية تحتوي على التمثيل السداسي العشري للـ argument
وفقًا للمنطق التالي باختلاف الأنواع:

| النوع                    | الوصف                                                                                                                                                                                                                                                                 |
| ------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `(U)Int*`                | تطبع الأرقام السداسية العشرية ("nibbles") من الأعلى أهمية إلى الأدنى أهمية (بترتيب كبير الطرفية أو بترتيب "مقروء للبشر"). وتبدأ بأعلى بايت غير صفري أهمية (مع حذف البايتات الصفرية البادئة)، لكنها تطبع دائمًا الرقمين الخاصين بكل بايت حتى لو كان الرقم الأول صفرًا. |
| `Date` و `DateTime`      | تُنسَّق كالأعداد الصحيحة المقابلة لها (عدد الأيام منذ epoch بالنسبة إلى Date، وقيمة Unix timestamp بالنسبة إلى DateTime).                                                                                                                                             |
| `String` و `FixedString` | تُشفَّر جميع البايتات ببساطة على شكل رقمين سداسيين عشريين. ولا تُحذف البايتات الصفرية.                                                                                                                                                                                |
| `Float*` و `Decimal`     | تُشفَّر وفق تمثيلها في الذاكرة. ويمثّل ClickHouse القيم داخليًا دائمًا بتنسيق little endian، لذلك تُشفَّر بهذا التنسيق. ولا تُحذف البايتات الصفرية البادئة أو اللاحقة.                                                                                                |
| `UUID`                   | يُشفَّر كسلسلة بترتيب كبير الطرفية.                                                                                                                                                                                                                                   |

تستخدم الدالة الأحرف الكبيرة `A-F`، من دون أي بادئات (مثل `0x`) أو لواحق (مثل `h`).

**البنية**

```sql theme={null}
hex(arg)
```

**الوسائط**

* `arg` — قيمة لتحويلها إلى تمثيل سداسي عشري. [`String`](/ar/reference/data-types/string) أو [`(U)Int*`](/ar/reference/data-types/int-uint) أو [`Float*`](/ar/reference/data-types/float) أو [`Decimal`](/ar/reference/data-types/decimal) أو [`Date`](/ar/reference/data-types/date) أو [`DateTime`](/ar/reference/data-types/datetime)

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

تُرجِع سلسلة نصية تحتوي على التمثيل السداسي العشري للوسيطة. [`String`](/ar/reference/data-types/string)

**أمثلة**

**عدد صحيح بسيط**

```sql title=Query theme={null}
SELECT hex(1)
```

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

**أرقام Float32**

```sql title=Query theme={null}
SELECT hex(toFloat32(number)) AS hex_presentation FROM numbers(15, 2)
```

```response title=Response theme={null}
┌─hex_presentation─┐
│ 00007041         │
│ 00008041         │
└──────────────────┘
```

**الأعداد من نوع Float64**

```sql title=Query theme={null}
SELECT hex(toFloat64(number)) AS hex_presentation FROM numbers(15, 2)
```

```response title=Response theme={null}
┌─hex_presentation─┐
│ 0000000000002E40 │
│ 0000000000003040 │
└──────────────────┘
```

**تحويل معرّف UUID**

```sql title=Query theme={null}
SELECT lower(hex(toUUID('61f0c404-5cb3-11e7-907b-a6006ad3dba0'))) AS uuid_hex
```

```response title=Response theme={null}
┌─uuid_hex─────────────────────────┐
│ 61f0c4045cb311e7907ba6006ad3dba0 │
└──────────────────────────────────┘
```

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

أُضيف في: v24.6.0

يفكّ ترميز فهرس منحنى Hilbert إلى Tuple من الأعداد الصحيحة غير الموقّعة، يمثّل إحداثيات في فضاء متعدد الأبعاد.

كما في الدالة `hilbertEncode`، لهذه الدالة وضعا تشغيل:

* **بسيط**
* **موسّع**

**الوضع البسيط**

يقبل حتى عددين صحيحين غير موقّعين كوسيطات، ويُنتج شيفرة `UInt64`.

**الوضع الموسّع**

يقبل قناع نطاق (Tuple) كوسيطة أولى، وما يصل إلى عددين صحيحين غير موقّعين
كوسيطات أخرى. يحدّد كل رقم في القناع عدد الـ bits التي
ستُزاح بها الوسيطة المقابلة إلى اليسار، مما يؤدي فعليًا إلى تحجيمها
ضمن نطاقها.

قد يكون توسيع النطاق مفيدًا عندما تحتاج إلى توزيع متقارب
لوسيطات تختلف نطاقاتها كثيرًا (أو عدد قيم مميّزة) على سبيل المثال: 'IP Address' `(0...FFFFFFFF)`
و'Country code' `(0...FF)`. وكما في دالة الترميز، يقتصر ذلك على 8
أرقام كحد أقصى.

**الصياغة**

```sql theme={null}
hilbertDecode(tuple_size, code)
```

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

* `tuple_size` — قيمة عدد صحيح لا تزيد على `2`. [`UInt8/16/32/64`](/ar/reference/data-types/int-uint) أو [`Tuple(UInt8/16/32/64)`](/ar/reference/data-types/tuple)
* `code` — شيفرة `UInt64`. [`UInt64`](/ar/reference/data-types/int-uint)

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

يعيد قيمة من النوع `Tuple` بالحجم المحدد. [`Tuple(UInt64)`](/ar/reference/data-types/tuple)

**أمثلة**

**الوضع البسيط**

```sql title=Query theme={null}
SELECT hilbertDecode(2, 31)
```

```response title=Response theme={null}
["3", "4"]
```

**وسيطة واحدة**

```sql title=Query theme={null}
-- Hilbert code for one argument is always the argument itself (as a tuple).
SELECT hilbertDecode(1, 1)
```

```response title=Response theme={null}
["1"]
```

**الوضع المُوسَّع**

```sql title=Query theme={null}
-- A single argument with a tuple specifying bit shifts will be right-shifted accordingly.
SELECT hilbertDecode(tuple(2), 32768)
```

```response title=Response theme={null}
["128"]
```

**استخدام الأعمدة**

```sql title=Query theme={null}
-- First create the table and insert some data
CREATE TABLE hilbert_numbers(
    n1 UInt32,
    n2 UInt32
)
ENGINE=MergeTree()
ORDER BY n1 SETTINGS index_granularity_bytes = '10Mi';
insert into hilbert_numbers (*) values(1,2);

-- Use column names instead of constants as function arguments
SELECT untuple(hilbertDecode(2, hilbertEncode(n1, n2))) FROM hilbert_numbers;
```

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

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

أُضيف في: v24.6.0

يحسب الشيفرة الخاصة بمنحنى هيلبرت لقائمة من الأعداد الصحيحة غير الموقعة.

للدالة وضعان للتشغيل:

* **البسيط**
* **الموسّع**

**الوضع البسيط**

يقبل حتى عددين صحيحين غير موقّعين كوسيطتين، وينتج شيفرة من النوع UInt64.

**الوضع الموسّع**

يقبل قناع نطاق ([Tuple](/ar/reference/data-types/tuple)) بوصفه
الوسيطة الأولى، وحتى 2 من [الأعداد الصحيحة غير الموقعة](/ar/reference/data-types/int-uint)
بوصفها الوسيطات الأخرى.

يحدّد كل رقم في القناع عدد البتات التي ستُزاح بها
الوسيطة المقابلة إلى اليسار، مما يؤدي فعليًا إلى تحجيم الوسيطة ضمن نطاقها.

**الصياغة**

```sql theme={null}
-- Simplified mode
hilbertEncode(args)

-- Expanded mode
hilbertEncode(range_mask, args)
```

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

* `args` — حتى قيمتَين من `UInt` أو عمودَين من النوع `UInt`. [`UInt8/16/32/64`](/ar/reference/data-types/int-uint)
* `range_mask` — في الوضع الموسّع، حتى قيمتَين من `UInt` أو عمودَين من النوع `UInt`. [`UInt8/16/32/64`](/ar/reference/data-types/int-uint)

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

يُرجع شيفرة `UInt64`. [`UInt64`](/ar/reference/data-types/int-uint)

**أمثلة**

**الوضع البسيط**

```sql title=Query theme={null}
SELECT hilbertEncode(3, 4)
```

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

**الوضع الموسّع**

```sql title=Query theme={null}
-- Range expansion can be beneficial when you need a similar distribution for
-- arguments with wildly different ranges (or cardinality).
-- For example: 'IP Address' (0...FFFFFFFF) and 'Country code' (0...FF).
-- Note: tuple size must be equal to the number of the other arguments.
SELECT hilbertEncode((10, 6), 1024, 16)
```

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

**وسيطة واحدة**

```sql title=Query theme={null}
-- For a single argument without a tuple, the function returns the argument
-- itself as the Hilbert index, since no dimensional mapping is needed.
SELECT hilbertEncode(1)
```

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

**وسيطة واحدة (موسَّعة)**

```sql title=Query theme={null}
-- If a single argument is provided with a tuple specifying bit shifts, the function
-- shifts the argument left by the specified number of bits.
SELECT hilbertEncode(tuple(2), 128)
```

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

**استخدام الأعمدة**

```sql title=Query theme={null}
-- First create the table and insert some data
CREATE TABLE hilbert_numbers(
    n1 UInt32,
    n2 UInt32
)
ENGINE=MergeTree()
ORDER BY n1;
insert into hilbert_numbers (*) values(1, 2);

-- Use column names instead of constants as function arguments
SELECT hilbertEncode(n1, n2) FROM hilbert_numbers;
```

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

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

أُضيف في: v24.6.0

يفك ترميز Morton ‏(ZCurve) إلى tuple المناظرة من الأعداد الصحيحة غير الموقَّعة.

كما هو الحال مع الدالة `mortonEncode`، فإن لهذه الدالة وضعَي تشغيل:

* **البسيط**
* **الموسَّع**

**الوضع البسيط**

يقبل حجم tuple الناتجة بوصفه المعامل الأول، والشيفرة بوصفها المعامل الثاني.

**الوضع الموسَّع**

يقبل قناع نطاق (tuple) بوصفه المعامل الأول، والشيفرة بوصفها المعامل الثاني.
ويحدّد كل رقم في القناع مقدار تقليص النطاق:

* `1` - بدون تقليص
* `2` - تقليص بمقدار 2x
* `3` - تقليص بمقدار 3x
  ⋮
* حتى 8x.

قد يكون توسيع النطاق مفيدًا عندما تحتاج إلى توزيع متقارب
لمعاملات ذات نطاقات مختلفة جدًا (أو عدد قيم مميّزة مختلف جدًا). على سبيل المثال: 'IP Address' `(0...FFFFFFFF)`
و'Country code' `(0...FF)`. وكما هو الحال مع دالة الترميز، يقتصر ذلك على
8 أرقام كحد أقصى.

**البنية**

```sql theme={null}
-- Simple mode
mortonDecode(tuple_size, code)

-- Expanded mode
mortonDecode(range_mask, code)
```

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

* `tuple_size` — قيمة عددية صحيحة لا تتجاوز 8. [`UInt8/16/32/64`](/ar/reference/data-types/int-uint)
* `range_mask` — في الوضع الموسّع، القناع الخاص بكل معامل. القناع هو Tuple من أعداد صحيحة غير موقّعة. ويحدّد كل رقم في القناع مقدار تقليص النطاق. [`Tuple(UInt8/16/32/64)`](/ar/reference/data-types/tuple)
* `code` — رمز من النوع UInt64. [`UInt64`](/ar/reference/data-types/int-uint)

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

يعيد Tuple بالحجم المحدد. [`Tuple(UInt64)`](/ar/reference/data-types/tuple)

**أمثلة**

**الوضع البسيط**

```sql title=Query theme={null}
SELECT mortonDecode(3, 53)
```

```response title=Response theme={null}
["1", "2", "3"]
```

**وسيطة واحدة**

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

```response title=Response theme={null}
["1"]
```

**الوضع الموسَّع، تقليص معامل واحد**

```sql title=Query theme={null}
SELECT mortonDecode(tuple(2), 32768)
```

```response title=Response theme={null}
["128"]
```

**استخدام الأعمدة**

```sql title=Query theme={null}
-- First create the table and insert some data
CREATE TABLE morton_numbers(
    n1 UInt32,
    n2 UInt32,
    n3 UInt16,
    n4 UInt16,
    n5 UInt8,
    n6 UInt8,
    n7 UInt8,
    n8 UInt8
)
ENGINE=MergeTree()
ORDER BY n1;
INSERT INTO morton_numbers (*) values(1, 2, 3, 4, 5, 6, 7, 8);

-- Use column names instead of constants as function arguments
SELECT untuple(mortonDecode(8, mortonEncode(n1, n2, n3, n4, n5, n6, n7, n8))) FROM morton_numbers;
```

```response title=Response theme={null}
1 2 3 4 5 6 7 8
```

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

أُضيفت في: v24.6.0

تحسب ترميز Morton ‏(ZCurve) لقائمة من الأعداد الصحيحة غير الموقعة.

للدالة نمطان للتشغيل:

* **بسيط**
* *موسّع*\*

**الوضع البسيط**

يقبل ما يصل إلى 8 أعداد صحيحة غير موقعة كوسائط ويُنتج قيمة `UInt64`.

**الوضع الموسّع**

يقبل قناع نطاق ([Tuple](/ar/reference/data-types/tuple)) كوسيط أول، و
ما يصل إلى 8 [أعداد صحيحة غير موقعة](/ar/reference/data-types/int-uint) كوسائط أخرى.

يحدد كل رقم في القناع مقدار توسيع النطاق:

* 1 - بدون توسيع
* 2 - توسيع بمقدار 2x
* 3 - توسيع بمقدار 3x
  ⋮
* توسيع يصل إلى 8x.

**الصياغة**

```sql theme={null}
-- Simplified mode
mortonEncode(args)

-- Expanded mode
mortonEncode(range_mask, args)
```

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

* `args` — حتى 8 أعداد صحيحة غير موقَّعة أو أعمدة من النوع المذكور أعلاه. [`UInt8/16/32/64`](/ar/reference/data-types/int-uint)
* `range_mask` — في الوضع الموسَّع، القناع الخاص بكل وسيط. القناع عبارة عن `Tuple` من أعداد صحيحة غير موقَّعة من `1` إلى `8`. ويحدِّد كل رقم في القناع مقدار تقليص النطاق. [`Tuple(UInt8/16/32/64)`](/ar/reference/data-types/tuple)

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

يُرجع رمزًا من النوع `UInt64`. [`UInt64`](/ar/reference/data-types/int-uint)

**أمثلة**

**الوضع البسيط**

```sql title=Query theme={null}
SELECT mortonEncode(1, 2, 3)
```

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

**الوضع الموسّع**

```sql title=Query theme={null}
-- Range expansion can be beneficial when you need a similar distribution for
-- arguments with wildly different ranges (or cardinality)
-- For example: 'IP Address' (0...FFFFFFFF) and 'Country code' (0...FF).
-- Note: the Tuple size must be equal to the number of the other arguments.
SELECT mortonEncode((1,2), 1024, 16)
```

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

**وسيطة واحدة**

```sql title=Query theme={null}
-- Morton encoding for one argument is always the argument itself
SELECT mortonEncode(1)
```

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

**موسّع لوسيطة واحدة**

```sql title=Query theme={null}
SELECT mortonEncode(tuple(2), 128)
```

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

**استخدام الأعمدة**

```sql title=Query theme={null}
-- First create the table and insert some data
CREATE TABLE morton_numbers(
    n1 UInt32,
    n2 UInt32,
    n3 UInt16,
    n4 UInt16,
    n5 UInt8,
    n6 UInt8,
    n7 UInt8,
    n8 UInt8
)
ENGINE=MergeTree()
ORDER BY n1;
INSERT INTO morton_numbers (*) values(1, 2, 3, 4, 5, 6, 7, 8);

-- Use column names instead of constants as function arguments
SELECT mortonEncode(n1, n2, n3, n4, n5, n6, n7, n8) FROM morton_numbers;
```

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

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

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

يفكّ ترميز [sqid](https://sqids.org/) إلى مصفوفة من الأرقام.

**الصياغة**

```sql theme={null}
sqidDecode(sqid)
```

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

* `sqid` — معرّف `sqid` المطلوب فك ترميزه. [`String`](/ar/reference/data-types/string)

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

يعيد مصفوفة أرقام من `sqid`. [`Array(UInt64)`](/ar/reference/data-types/array)

**أمثلة**

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

```sql title=Query theme={null}
SELECT sqidDecode('gXHfJ1C6dN');
```

```response title=Response theme={null}
┌─sqidDecode('gXHfJ1C6dN')─────┐
│ [1, 2, 3, 4, 5]              │
└──────────────────────────────┘
```

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

ظهر لأول مرة في: v24.1.0

يحوِّل الأرقام إلى [sqid](https://sqids.org/)، وهي سلسلة معرّفات تشبه معرّفات YouTube.

**الصيغة**

```sql theme={null}
sqidEncode(n1[, n2, ...])
```

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

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

* `n1[, n2, ...]` — أي عدد من الأرقام. [`UInt8/16/32/64`](/ar/reference/data-types/int-uint)

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

يعيد معرّف hash من نوع [`String`](/ar/reference/data-types/string)

**أمثلة**

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

```sql title=Query theme={null}
SELECT sqidEncode(1, 2, 3, 4, 5);
```

```response title=Response theme={null}
┌─sqidEncode(1, 2, 3, 4, 5)─┐
│ gXHfJ1C6dN                │
└───────────────────────────┘
```

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

قُدِّمت في: v21.8.0

تفسِّر كل زوج من الخانات الثنائية (في الوسيطة) على أنه عدد، ثم تحوِّله إلى البايت الذي يمثِّله هذا العدد. وتنفِّذ هذه الدالة العملية العكسية للدالة `bin`.

بالنسبة إلى وسيطة رقمية، لا تُرجع `unbin()` المعكوس لـ `bin()`. وإذا أردت تحويل النتيجة إلى عدد، فيمكنك استخدام الدالتين reverse و `reinterpretAs<Type>`.

<Note>
  إذا جرى استدعاء `unbin` من داخل `clickhouse-client`، فستُعرَض السلاسل الثنائية باستخدام UTF-8.
</Note>

تدعم الخانات الثنائية `0` و`1`. ولا يلزم أن يكون عدد الخانات الثنائية من مضاعفات الثمانية. وإذا احتوت سلسلة الوسيطة على أي شيء غير الخانات الثنائية،
فستكون النتيجة غير معرّفة (من دون طرح أي استثناء).

**الصيغة**

```sql theme={null}
unbin(arg)
```

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

* `arg` — سلسلة تحتوي على أي عدد من الخانات الثنائية. [`String`](/ar/reference/data-types/string)

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

تُرجِع سلسلة ثنائية (BLOB). [`String`](/ar/reference/data-types/string)

**أمثلة**

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

```sql title=Query theme={null}
SELECT UNBIN('001100000011000100110010'), UNBIN('0100110101111001010100110101000101001100')
```

```response title=Response theme={null}
┌─unbin('001100000011000100110010')─┬─unbin('0100110101111001010100110101000101001100')─┐
│ 012                               │ MySQL                                             │
└───────────────────────────────────┴───────────────────────────────────────────────────┘
```

**حوِّل إلى عدد**

```sql title=Query theme={null}
SELECT reinterpretAsUInt64(reverse(unbin('1110'))) AS num
```

```response title=Response theme={null}
┌─num─┐
│  14 │
└─────┘
```

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

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

تنفّذ العملية العكسية لـ [`hex`](#hex). إذ تفسّر كل زوج من الأرقام السداسية العشرية (في الوسيط) على أنه عدد، ثم تحوّله
إلى البايت الذي يمثّله هذا العدد. والقيمة المعادة هي سلسلة ثنائية (BLOB).

إذا أردت تحويل النتيجة إلى عدد، يمكنك استخدام الدالتين `reverse` و `reinterpretAs<Type>`.

<Note>
  يفسّر `clickhouse-client` السلاسل على أنها UTF-8.
  وقد يؤدي ذلك إلى ظهور القيم التي يعيدها `hex` بشكل غير متوقع.
</Note>

يدعم الأحرف الكبيرة والصغيرة `A-F`.
ولا يلزم أن يكون عدد الأرقام السداسية العشرية زوجيًا.
فإذا كان فرديًا، فسيُفسَّر الرقم الأخير على أنه النصف الأقل أهمية من البايت `00-0F`.
وإذا احتوت سلسلة الوسيط على أي شيء غير أرقام سداسية عشرية، فستُعاد نتيجة تعتمد على التنفيذ (من دون طرح استثناء).
أما بالنسبة إلى الوسيط الرقمي، فلا تنفّذ `unhex()` معكوس `hex(N)`.

**الصياغة**

```sql theme={null}
unhex(arg)
```

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

* `arg` — سلسلة تحتوي على أي عدد من المحارف السداسية العشرية. [`String`](/ar/reference/data-types/string) أو [`FixedString`](/ar/reference/data-types/fixedstring)

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

تعيد سلسلة ثنائية (BLOB). [`String`](/ar/reference/data-types/string)

**أمثلة**

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

```sql title=Query theme={null}
SELECT unhex('303132'), UNHEX('4D7953514C')
```

```response title=Response theme={null}
┌─unhex('303132')─┬─unhex('4D7953514C')─┐
│ 012             │ MySQL               │
└─────────────────┴─────────────────────┘
```

**حوّل إلى رقم**

```sql title=Query theme={null}
SELECT reinterpretAsUInt64(reverse(unhex('FFF'))) AS num
```

```response title=Response theme={null}
┌──num─┐
│ 4095 │
└──────┘
```
