نظرة عامة
استخدام النتائج الشرطية مباشرةً
0 أو 1 أو NULL. لذا يمكنك استخدام نتائجها مباشرةً كما يلي:
قيم NULL في التعبيرات الشرطية
NULL في التعبيرات الشرطية، تكون النتيجة أيضًا NULL.
Nullable.
ويوضح المثال التالي ذلك، إذ يفشل بسبب عدم إضافة شرط equals إلى multiIf.
عبارة CASE
CASE WHEN ... THEN ... ELSE ... END
يوفّر هذا الشكل مرونة كاملة، ويُنفَّذ داخليًا باستخدام الدالة multiIf. ويُقيَّم كل شرط على نحو مستقل، ويمكن أن تتضمن التعبيرات قيمًا غير ثابتة.
CASE <expr> WHEN <val1> THEN ... WHEN <val2> THEN ... ELSE ... END
هذا الشكل الأكثر اختصارًا مُحسَّن لمطابقة القيم الثابتة، ويستخدم داخليًاcaseWithExpression().
محاذير
multiIf) قبل تقييم أي شروط. ويكتسب هذا أهمية عندما تختلف تعبيرات الإرجاع في النوع، مثل اختلاف المناطق الزمنية أو الأنواع الرقمية.
- يُختار نوع النتيجة بناءً على أكبر نوع متوافق بين جميع الفروع.
- وبمجرد اختيار هذا النوع، تُحوَّل جميع الفروع الأخرى إليه ضمنيًا - حتى إن كان منطقها لن يُنفَّذ مطلقًا أثناء التشغيل.
- بالنسبة إلى أنواع مثل DateTime64، حيث تكون المنطقة الزمنية جزءًا من تعريف النوع، فقد يؤدي ذلك إلى سلوك غير متوقع: إذ قد تُستخدم أول منطقة زمنية تمت مصادفتها في جميع الفروع، حتى عندما تحدد الفروع الأخرى مناطق زمنية مختلفة.
Asia/Kolkata
DateTime64(3, <timezone>). ويستنتج أن النوع المشترك هو DateTime64(3, 'Asia/Kolkata' لأنه أول نوع يصادفه، ويحوّل الفروع الأخرى ضمنيًا إلى هذا النوع.
يمكن معالجة ذلك بالتحويل إلى سلسلة نصية للحفاظ على تنسيق المنطقة الزمنية المطلوب:
clamp
value— القيمة المطلوب تقييدها. -min— الحد الأدنى. -max— الحد الأقصى.
Query
Response
Query
Response
Query
Response
greatest
NULL.
- بالنسبة إلى المصفوفات، تعيد المصفوفة الأكبر ترتيبًا معجميًا.
- بالنسبة إلى أنواع
DateTime، تتم ترقية نوع النتيجة إلى أكبر نوع (مثلًا،DateTime64عند مزجه معDateTime32).
استخدم الإعداد
least_greatest_legacy_null_behavior لتغيير سلوك NULLقدّم الإصدار 24.12 تغييرًا غير متوافق مع الإصدارات السابقة، بحيث يتم تجاهل قيم NULL، بينما كان يُرجِع سابقًا NULL إذا كانت إحدى الوسيطات NULL.
للاحتفاظ بالسلوك السابق، اضبط الإعداد least_greatest_legacy_null_behavior (الافتراضي: false) على true.x1[, x2, ...]— قيمة واحدة أو عدة قيم للمقارنة. يجب أن تكون جميع الوسائط من أنواع قابلة للمقارنة.Any
Any
أمثلة
الأنواع الرقمية
Query
Response
Query
Response
Query
Response
if
- إذا قُيِّم الشرط
condإلى قيمة غير صفرية، فتعيد الدالة نتيجة التعبيرthen. - إذا قُيِّم
condإلى صفر أو NULL، فتُعاد نتيجة التعبيرelse.
short_circuit_function_evaluation في ما إذا كان التقييم المختصر مستخدمًا.
إذا كان مفعّلًا، فلا يُقيَّم التعبير then إلا على الصفوف التي تكون فيها قيمة cond هي true، ويُقيَّم التعبير else على الصفوف التي تكون فيها قيمة cond هي false.
على سبيل المثال، عند استخدام التقييم المختصر، لا يُطرَح استثناء القسمة على صفر عند تنفيذ الاستعلام التالي:
then و else من نوعين متشابهين.
الصيغة
cond— الشرط الذي يجري تقييمه.UInt8أوNullable(UInt8)أوNULLthen— التعبير المُعاد إذا كانتcondتساويtrue. -else— التعبير المُعاد إذا كانتcondتساويfalseأوNULL.
then أو else، حسب الشرط cond.
أمثلة
مثال على الاستخدام
Query
Response
least
NULL.
- بالنسبة إلى المصفوفات، يعيد المصفوفة الأصغر ترتيبًا معجميًا.
- بالنسبة إلى أنواع DateTime، يُرقّى نوع النتيجة إلى أكبر نوع (على سبيل المثال، DateTime64 عند دمجه مع DateTime32).
استخدم الإعداد
least_greatest_legacy_null_behavior لتغيير سلوك NULLقدّم الإصدار 24.12 تغييرًا غير متوافق مع الإصدارات السابقة، بحيث يتم تجاهل قيم NULL، بينما كان يعيد سابقًا القيمة NULL إذا كان أحد الوسائط NULL.
للاحتفاظ بالسلوك السابق، اضبط الإعداد least_greatest_legacy_null_behavior (القيمة الافتراضية: false) على true.x1[, x2, ...]— قيمة واحدة أو عدة قيم للمقارنة. يجب أن تكون جميع الوسائط من أنواع قابلة للمقارنة.Any
Any
أمثلة
الأنواع الرقمية
Query
Response
Query
Response
Query
Response
multiIf
CASE بصورة أكثر اختصارًا في الاستعلام.
يُقيِّم كل شرط بالترتيب. وبالنسبة إلى أول شرط يكون صحيحًا (غير صفري وليس NULL)، يُرجِع قيمة الفرع المقابلة.
إذا لم يكن أي من الشروط صحيحًا، فسيُرجِع قيمة else.
يتحكم الإعداد short_circuit_function_evaluation في
ما إذا كان التقييم المختصر مستخدمًا. وإذا كان مفعّلًا، فلن يُقيَّم التعبير then_i إلا على الصفوف التي تكون فيها
((NOT cond_1) AND ... AND (NOT cond_{i-1}) AND cond_i) صحيحة.
على سبيل المثال، مع التقييم المختصر، لا يحدث استثناء قسمة على صفر عند تنفيذ الاستعلام التالي:
else نوع فائق مشترك. تُعامل الشروط ذات القيمة NULL على أنها false.
الصيغة
caseWithoutExpression, caseWithoutExpr
الوسائط
cond_N— الشرط المُقيَّم رقم N الذي يحدد ما إذا كانتthen_Nستُعاد.UInt8أوNullable(UInt8)أوNULLthen_N— ناتج الدالة عندما تكونcond_Nصحيحة. -else— ناتج الدالة إذا لم يتحقق أي من الشروط.
then_N الموافق لـ cond_N المطابق، وإلا فتُعيد قيمة else.
أمثلة
مثال على الاستخدام
Query
Response