Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

دوال التقريب

ceil

أُضيف في: v1.1.0

مثل floor، لكنه يعيد أصغر عدد مُقرَّب أكبر من أو يساوي x. إذا أدّى التقريب إلى تجاوز السعة (على سبيل المثال، ceiling(255, -1))، تكون النتيجة غير معرّفة.

الصياغة

ceiling(x[, N])

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

الوسيطات

  • x — القيمة المراد تقريبها. Float* أو Decimal* أو (U)Int*
  • N — اختياري. عدد المنازل العشرية المطلوب التقريب إليها. القيمة الافتراضية هي صفر، ما يعني التقريب إلى عدد صحيح. ويمكن أن تكون سالبة. (U)Int*

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

يعيد عددًا مُقرَّبًا من النوع نفسه لـ x. Float* أو Decimal* أو (U)Int*

أمثلة

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

SELECT ceiling(123.45, 1) AS rounded
┌─rounded─┐
│   123.5 │
└─────────┘

الدقة السالبة

SELECT ceiling(123.45, -1)
┌─ceiling(123.45, -1)─┐
│                 130 │
└─────────────────────┘

floor

أُضيف في: v1.1.0

يعيد أكبر عدد مُقرَّب أصغر من x أو مساوياً له، بحيث يكون العدد المُقرَّب من مضاعفات 1 / 10 * N، أو أقرب عدد من نوع البيانات المناسب إذا لم تكن 1 / 10 * N قيمة دقيقة.

يمكن تقريب الوسيطات الصحيحة باستخدام وسيطة N سالبة. أما إذا كانت N غير سالبة، فتعيد الدالة x.

إذا أدى التقريب إلى تجاوز السعة (على سبيل المثال، floor(-128, -1))، فإن النتيجة غير معرّفة.

الصياغة

floor(x[, N])

الوسيطات

  • x — القيمة المطلوب تقريبها. Float* أو Decimal* أو (U)Int*
  • N — اختياري. عدد المنازل العشرية المراد التقريب إليها. القيمة الافتراضية هي صفر، ما يعني التقريب إلى عدد صحيح. يمكن أن تكون سالبة. (U)Int*

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

يعيد عددًا مقرَّبًا من النوع نفسه لـ x. Float* أو Decimal* أو (U)Int*

أمثلة

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

SELECT floor(123.45, 1) AS rounded
┌─rounded─┐
│   123.4 │
└─────────┘

الدقة السالبة

SELECT floor(123.45, -1)
┌─floor(123.45, -1)─┐
│               120 │
└───────────────────┘

round

أُضيف في: v1.1.0

تقرّب هذه الدالة قيمة إلى عدد محدد من المنازل العشرية N.

  • إذا كانت N > 0، فتقرّب الدالة إلى يمين الفاصلة العشرية.
  • إذا كانت N < 0، فتقرّب الدالة إلى يسار الفاصلة العشرية.
  • إذا كانت N = 0، فتقرّب الدالة إلى أقرب عدد صحيح.

تعيد الدالة أقرب عدد في المرتبة المحددة. إذا كانت قيمة الإدخال على بُعد متساوٍ من عددين متجاورين، تستخدم الدالة تقريب المصرفيين لمدخلات Float*، وتقرّب بعيدًا عن الصفر لأنواع الأعداد الأخرى (Decimal*).

إذا أدى التقريب إلى تجاوز السعة (على سبيل المثال، round(255, -1))، فالنتيجة غير معرّفة.

الصياغة

round(x[, N])

الوسيطات

  • x — رقم يُراد تقريبه. Float* أو Decimal* أو (U)Int*
  • N — اختياري. عدد المنازل العشرية المطلوب التقريب إليها. القيمة الافتراضية هي 0. (U)Int*

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

يعيد رقمًا مُقرَّبًا من النوع نفسه مثل x. Float* أو Decimal* أو (U)Int*

أمثلة

مدخلات Float

SELECT number / 2 AS x, round(x) FROM system.numbers LIMIT 3;
┌───x─┬─round(x)─┐
│   0 │        0 │
│ 0.5 │        0 │
│   1 │        1 │
└─────┴──────────┘

قيم الإدخال من نوع Decimal

SELECT cast(number / 2 AS  Decimal(10,4)) AS x, round(x) FROM system.numbers LIMIT 3;
┌───x─┬─round(x)─┐
│   0 │        0 │
│ 0.5 │        1 │
│   1 │        1 │
└─────┴──────────┘

roundAge

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

تأخذ رقمًا يمثّل عمر إنسان، وتقارنه بالفئات العمرية القياسية، ثم تُرجع إما الحد الأدنى أو الحد الأعلى للفئة العمرية التي يقع ضمنها هذا الرقم.

  • تُرجع 0 عندما يكون age < 1.
  • تُرجع 17 عندما يكون 1 ≤ age ≤ 17.
  • تُرجع 18 عندما يكون 18 ≤ age ≤ 24.
  • تُرجع 25 عندما يكون 25 ≤ age ≤ 34.
  • تُرجع 35 عندما يكون 35 ≤ age ≤ 44.
  • تُرجع 45 عندما يكون 45 ≤ age ≤ 54.
  • تُرجع 55 عندما يكون age ≥ 55.

الصياغة

roundAge(num)

الوسيطات

  • age — رقم يمثّل عمرًا بالسنوات. (U)Int* أو Float*

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

يعيد إما أعلى عمر أو أدنى عمر للنطاق الذي يقع ضمنه age. UInt8

أمثلة

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

SELECT *, roundAge(*) FROM system.numbers WHERE number IN (0, 5, 20, 31, 37, 54, 72);
┌─number─┬─roundAge(number)─┐
│      0 │                0 │
│      5 │               17 │
│     20 │               18 │
│     31 │               25 │
│     37 │               35 │
│     54 │               45 │
│     72 │               55 │
└────────┴──────────────────┘

roundBankers

أُضيف في: v20.1.0

يقرّب عددًا إلى منزلة عشرية محددة N. إذا كانت قيمة التقريب تقع تمامًا في المنتصف بين عددين، فتستخدم الدالة أسلوب تقريب يُسمّى تقريب المصرفيين، وهو أسلوب التقريب الافتراضي للأعداد ذات الفاصلة العائمة المعرّفة وفق IEEE 754.

  • إذا كانت N > 0، فإن الدالة تقرّب إلى يمين الفاصلة العشرية
  • إذا كانت N < 0، فإن الدالة تقرّب إلى يسار الفاصلة العشرية
  • إذا كانت N = 0، فإن الدالة تقرّب إلى أقرب عدد صحيح

الصياغة

roundBankers(x[, N])

الوسيطات

  • x — رقم يُراد تقريبه. (U)Int* أو Decimal* أو Float*
  • [, N] — اختياري. عدد المنازل العشرية المطلوب التقريب إليها. القيمة الافتراضية هي 0. (U)Int*

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

تُعيد قيمةً مُقرَّبة باستخدام أسلوب تقريب المصرفيين. (U)Int* أو Decimal* أو Float*

أمثلة

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

SELECT number / 2 AS x, roundBankers(x, 0) AS b FROM system.numbers LIMIT 10
┌───x─┬─b─┐
│   0 │ 0 │
│ 0.5 │ 0 │
│   1 │ 1 │
│ 1.5 │ 2 │
│   2 │ 2 │
│ 2.5 │ 2 │
│   3 │ 3 │
│ 3.5 │ 4 │
│   4 │ 4 │
│ 4.5 │ 4 │
└─────┴───┘

roundDown

أُضيف في: v20.1.0

يقرّب عددًا نزولًا إلى أحد عناصر المصفوفة المحددة. إذا كانت القيمة أقل من الحد الأدنى، فسيُعاد الحد الأدنى.

الصياغة

roundDown(num, arr)

الوسيطات

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

يُرجع رقمًا مُقرَّبًا نزولًا إلى أحد العناصر في arr. إذا كانت القيمة أقل من الحد الأدنى، فسيُرجع الحد الأدنى. (U)Int* أو Float*

الأمثلة

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

SELECT *, roundDown(*, [3, 4, 5]) FROM system.numbers WHERE number IN (0, 1, 2, 3, 4, 5)
┌─number─┬─roundDown(number, [3, 4, 5])─┐
│      0 │                            3 │
│      1 │                            3 │
│      2 │                            3 │
│      3 │                            3 │
│      4 │                            4 │
│      5 │                            5 │
└────────┴──────────────────────────────┘

roundDuration

أُضيف في: v1.1.0

يُقرِّب عددًا إلى الأسفل إلى أقرب قيمة ضمن مجموعة من المدد شائعة الاستخدام: 1, 10, 30, 60, 120, 180, 240, 300, 600, 1200, 1800, 3600, 7200, 18000, 36000. إذا كان العدد أقل من واحد، فستكون القيمة المعادة 0.

الصيغة

roundDuration(num)

الوسيطات

  • num — رقم يُقرَّب إلى أحد الأرقام ضمن مجموعة المدد الشائعة. (U)Int* أو Float*

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

يعيد 0 إذا كان num < 1. وإلا، فيعيد إحدى القيم التالية: 1, 10, 30, 60, 120, 180, 240, 300, 600, 1200, 1800, 3600, 7200, 18000, 36000. UInt16

أمثلة

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

SELECT *, roundDuration(*) FROM system.numbers WHERE number IN (0, 9, 19, 47, 101, 149, 205, 271, 421, 789, 1423, 2345, 4567, 9876, 24680, 42573)
┌─number─┬─roundDuration(number)─┐
│      0 │                     0 │
│      9 │                     1 │
│     19 │                    10 │
│     47 │                    30 │
│    101 │                    60 │
│    149 │                   120 │
│    205 │                   180 │
│    271 │                   240 │
│    421 │                   300 │
│    789 │                   600 │
│   1423 │                  1200 │
│   2345 │                  1800 │
│   4567 │                  3600 │
│   9876 │                  7200 │
│  24680 │                 18000 │
│  42573 │                 36000 │
└────────┴───────────────────────┘

roundToExp2

تم تقديمه في: v1.1.0

يقرّب عددًا إلى الأسفل إلى أقرب قوة للعدد اثنين (عدد صحيح وغير سالب). إذا كان العدد أقل من واحد، فستُعاد القيمة 0.

الصيغة

roundToExp2(num)

الوسيطات

  • num — العدد المراد تقريبه. (U)Int* أو Float*

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

يعيد num بعد تقريبه نزولًا إلى أقرب قوة للعدد اثنين (عدد صحيح غير سالب)، وإلا يعيد 0 إذا كان num < 1. (U)Int* أو Float*

أمثلة

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

SELECT *, roundToExp2(*) FROM system.numbers WHERE number IN (0, 2, 5, 10, 19, 50)
┌─number─┬─roundToExp2(number)─┐
│      0 │                   0 │
│      2 │                   2 │
│      5 │                   4 │
│     10 │                   8 │
│     19 │                  16 │
│     50 │                  32 │
└────────┴─────────────────────┘

trunc

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

مثل floor، لكنه يعيد العدد المقرَّب ذي أكبر قيمة مطلقة تكون أقل من أو مساوية للقيمة المطلقة لـ x.

الصيغة

truncate(x[, N])

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

الوسيطات

  • x — القيمة المطلوب تقريبها. Float* أو Decimal* أو (U)Int*
  • N — اختياري. عدد المنازل العشرية المطلوب التقريب إليها. القيمة الافتراضية هي صفر، ما يعني التقريب إلى عدد صحيح. (U)Int*

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

يعيد عددًا مقربًا من النوع نفسه لـ x. Float* أو Decimal* أو (U)Int*

أمثلة

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

SELECT truncate(123.499, 1) AS res;
┌───res─┐
│ 123.4 │
└───────┘
Navigation