ClickHouse/docs/fa/sql-reference/functions/conditional-functions.md
Ivan Blinkov d91c97d15d
[docs] replace underscores with hyphens (#10606)
* Replace underscores with hyphens

* remove temporary code

* fix style check

* fix collapse
2020-04-30 21:19:18 +03:00

208 lines
7.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
machine_translated: true
machine_translated_rev: d734a8e46ddd7465886ba4133bff743c55190626
toc_priority: 43
toc_title: "\u0634\u0631\u0637\u06CC "
---
# توابع شرطی {#conditional-functions}
## اگر {#if}
کنترل انشعاب مشروط. بر خلاف اکثر سیستم های تاتر همیشه هر دو عبارت را ارزیابی کنید `then` و `else`.
**نحو**
``` sql
SELECT if(cond, then, else)
```
اگر شرایط `cond` ارزیابی به یک مقدار غیر صفر, می گرداند در نتیجه بیان `then` و نتیجه بیان `else`, اگر در حال حاضر, قلم است. اگر `cond` صفر یا `NULL` سپس نتیجه `then` بیان نادیده گرفته شده است و در نتیجه `else` عبارت, در صورت حاضر, بازگشته است.
**پارامترها**
- `cond` The condition for evaluation that can be zero or not. The type is UInt8, Nullable(UInt8) or NULL.
- `then` - بیان به بازگشت اگر شرایط ملاقات کرده است.
- `else` - بیان به بازگشت اگر شرایط ملاقات نکرده است.
**مقادیر بازگشتی**
تابع اجرا می شود `then` و `else` عبارات و نتیجه خود را بر می گرداند, بسته به اینکه شرایط `cond` به پایان رسید تا صفر یا نه.
**مثال**
پرسوجو:
``` sql
SELECT if(1, plus(2, 2), plus(2, 6))
```
نتیجه:
``` text
┌─plus(2, 2)─┐
│ 4 │
└────────────┘
```
پرسوجو:
``` sql
SELECT if(0, plus(2, 2), plus(2, 6))
```
نتیجه:
``` text
┌─plus(2, 6)─┐
│ 8 │
└────────────┘
```
- `then` و `else` باید کمترین نوع مشترک دارند.
**مثال:**
اینو بگیر `LEFT_RIGHT` جدول:
``` sql
SELECT *
FROM LEFT_RIGHT
┌─left─┬─right─┐
│ ᴺᵁᴸᴸ │ 4 │
│ 1 │ 3 │
│ 2 │ 2 │
│ 3 │ 1 │
│ 4 │ ᴺᵁᴸᴸ │
└──────┴───────┘
```
پرس و جو زیر مقایسه می کند `left` و `right` مقادیر:
``` sql
SELECT
left,
right,
if(left < right, 'left is smaller than right', 'right is greater or equal than left') AS is_smaller
FROM LEFT_RIGHT
WHERE isNotNull(left) AND isNotNull(right)
┌─left─┬─right─┬─is_smaller──────────────────────────┐
1 3 left is smaller than right
2 2 right is greater or equal than left
3 1 right is greater or equal than left
└──────┴───────┴─────────────────────────────────────┘
```
یادداشت: `NULL` ارزش ها در این مثال استفاده نمی شود, بررسی [ارزشهای پوچ در شرطی](#null-values-in-conditionals) بخش.
## اپراتور سه تایی {#ternary-operator}
این همان کار می کند `if` تابع.
نحو: `cond ? then : else`
بازگشت `then` اگر `cond` ارزیابی درست باشد (بیشتر از صفر), در غیر این صورت بازده `else`.
- `cond` باید از نوع باشد `UInt8` و `then` و `else` باید کمترین نوع مشترک دارند.
- `then` و `else` می تواند باشد `NULL`
**همچنین نگاه کنید به**
- [اطلاعات دقیق](other-functions.md#ifnotfinite).
## چندف {#multiif}
اجازه می دهد تا شما را به نوشتن [CASE](../operators.md#operator_case) اپراتور فشرده تر در پرس و جو.
نحو: `multiIf(cond_1, then_1, cond_2, then_2, ..., else)`
**پارامترها:**
- `cond_N` — The condition for the function to return `then_N`.
- `then_N` — The result of the function when executed.
- `else` — The result of the function if none of the conditions is met.
تابع می پذیرد `2N+1` پارامترها
**مقادیر بازگشتی**
تابع یکی از مقادیر را برمی گرداند `then_N` یا `else`, بسته به شرایط `cond_N`.
**مثال**
دوباره با استفاده از `LEFT_RIGHT` جدول
``` sql
SELECT
left,
right,
multiIf(left < right, 'left is smaller', left > right, 'left is greater', left = right, 'Both equal', 'Null value') AS result
FROM LEFT_RIGHT
┌─left─┬─right─┬─result──────────┐
│ ᴺᵁᴸᴸ │ 4 │ Null value │
│ 1 │ 3 │ left is smaller │
│ 2 │ 2 │ Both equal │
│ 3 │ 1 │ left is greater │
│ 4 │ ᴺᵁᴸᴸ │ Null value │
└──────┴───────┴─────────────────┘
```
## با استفاده از نتایج شرطی به طور مستقیم {#using-conditional-results-directly}
شرطی همیشه به نتیجه `0`, `1` یا `NULL`. بنابراین شما می توانید نتایج شرطی به طور مستقیم مثل این استفاده کنید:
``` sql
SELECT left < right AS is_small
FROM LEFT_RIGHT
┌─is_small─┐
ᴺᵁᴸᴸ
1
0
0
ᴺᵁᴸᴸ
└──────────┘
```
## ارزشهای پوچ در شرطی {#null-values-in-conditionals}
زمانی که `NULL` ارزش ها در شرطی درگیر, نتیجه نیز خواهد بود `NULL`.
``` sql
SELECT
NULL < 1,
2 < NULL,
NULL < NULL,
NULL = NULL
┌─less(NULL, 1)─┬─less(2, NULL)─┬─less(NULL, NULL)─┬─equals(NULL, NULL)─┐
│ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │
└───────────────┴───────────────┴──────────────────┴────────────────────┘
```
بنابراین شما باید نمایش داده شد خود را با دقت ساخت اگر انواع هستند `Nullable`.
مثال زیر نشان می دهد این شکست برای اضافه کردن شرایط برابر به `multiIf`.
``` sql
SELECT
left,
right,
multiIf(left < right, 'left is smaller', left > right, 'right is smaller', 'Both equal') AS faulty_result
FROM LEFT_RIGHT
┌─left─┬─right─┬─faulty_result────┐
│ ᴺᵁᴸᴸ │ 4 │ Both equal │
│ 1 │ 3 │ left is smaller │
│ 2 │ 2 │ Both equal │
│ 3 │ 1 │ right is smaller │
│ 4 │ ᴺᵁᴸᴸ │ Both equal │
└──────┴───────┴──────────────────┘
```
[مقاله اصلی](https://clickhouse.tech/docs/en/query_language/functions/conditional_functions/) <!--hide-->