mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-24 08:32:02 +00:00
* Update operators.md (#70) * Update operators.md (#71) * CLICKHOUSEDOCS-163: EN review, RU translation. * CLICKHOUSEDOCS-163: Fix * Update docs/ru/data_types/special_data_types/interval.md Co-Authored-By: Ivan Blinkov <github@blinkov.ru> * Update docs/ru/query_language/operators.md Co-Authored-By: Ivan Blinkov <github@blinkov.ru> * Update docs/ru/data_types/special_data_types/interval.md Co-Authored-By: Ivan Blinkov <github@blinkov.ru> * CLICKHOUSEDOCS-163: Clarification.
This commit is contained in:
parent
aeaac4d573
commit
fe926f3c06
@ -3,11 +3,11 @@
|
|||||||
The family of data types representing time and date intervals. The resulting types of the [INTERVAL](../../query_language/operators.md#operator-interval) operator.
|
The family of data types representing time and date intervals. The resulting types of the [INTERVAL](../../query_language/operators.md#operator-interval) operator.
|
||||||
|
|
||||||
!!! warning "Warning"
|
!!! warning "Warning"
|
||||||
You can't use the `Interval` data types for storing values in tables.
|
You can't use `Interval` data types for storing values in tables.
|
||||||
|
|
||||||
Structure:
|
Structure:
|
||||||
|
|
||||||
- Time interval as unsigned integer value.
|
- Time interval as an unsigned integer value.
|
||||||
- Type of an interval.
|
- Type of an interval.
|
||||||
|
|
||||||
Supported interval types:
|
Supported interval types:
|
||||||
@ -21,7 +21,7 @@ Supported interval types:
|
|||||||
- `QUARTER`
|
- `QUARTER`
|
||||||
- `YEAR`
|
- `YEAR`
|
||||||
|
|
||||||
For each interval type, there is the separated data type. For example, the `DAY` interval is expressed as the `IntervalDay` data type:
|
For each interval type, there is a separate data type. For example, the `DAY` interval is expressed as the `IntervalDay` data type:
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
SELECT toTypeName(INTERVAL 4 DAY)
|
SELECT toTypeName(INTERVAL 4 DAY)
|
||||||
@ -45,9 +45,9 @@ SELECT now() as current_date_time, current_date_time + INTERVAL 4 DAY
|
|||||||
└─────────────────────┴───────────────────────────────┘
|
└─────────────────────┴───────────────────────────────┘
|
||||||
```
|
```
|
||||||
|
|
||||||
Intervals of different types can't be combined. You can't use intervals like `4 DAY 1 HOUR`, express intervals in the units that smaller or equal the the smallest unit of the interval. For example, `1 day and an hour` interval can be expressed as `25 HOUR` or `90000 SECOND`.
|
Intervals with different types can't be combined. You can't use intervals like `4 DAY 1 HOUR`. Express intervals in units that are smaller or equal to the smallest unit of the interval, for example, the interval `1 day and an hour` interval can be expressed as `25 HOUR` or `90000 SECOND`.
|
||||||
|
|
||||||
You can't perform arithmetical operations with the `Interval`-type values, but you can add intervals of different types consequently to some value. For example:
|
You can't perform arithmetical operations with `Interval`-type values, but you can add intervals of different types consequently to values in `Date` or `DateTime` data types. For example:
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
SELECT now() AS current_date_time, current_date_time + INTERVAL 4 DAY + INTERVAL 3 HOUR
|
SELECT now() AS current_date_time, current_date_time + INTERVAL 4 DAY + INTERVAL 3 HOUR
|
||||||
@ -58,7 +58,7 @@ SELECT now() AS current_date_time, current_date_time + INTERVAL 4 DAY + INTERVAL
|
|||||||
└─────────────────────┴────────────────────────────────────────────────────────┘
|
└─────────────────────┴────────────────────────────────────────────────────────┘
|
||||||
```
|
```
|
||||||
|
|
||||||
The following query causes the exception:
|
The following query causes an exception:
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
select now() AS current_date_time, current_date_time + (INTERVAL 4 DAY + INTERVAL 3 HOUR)
|
select now() AS current_date_time, current_date_time + (INTERVAL 4 DAY + INTERVAL 3 HOUR)
|
||||||
|
@ -351,8 +351,30 @@ SELECT toTypeName(CAST(x, 'Nullable(UInt16)')) FROM t_null
|
|||||||
|
|
||||||
## toInterval(Year|Quarter|Month|Week|Day|Hour|Minute|Second) {#function-tointerval}
|
## toInterval(Year|Quarter|Month|Week|Day|Hour|Minute|Second) {#function-tointerval}
|
||||||
|
|
||||||
Converts a Number type argument to a Interval type (duration).
|
Converts a Number type argument to an [Interval](../../data_types/special_data_types/interval.md) data type.
|
||||||
The interval type is actually very useful, you can use this type of data to perform arithmetic operations directly with Date or DateTime. At the same time, ClickHouse provides a more convenient syntax for declaring Interval type data. For example:
|
|
||||||
|
**Syntax**
|
||||||
|
|
||||||
|
```sql
|
||||||
|
toIntervalSecond(number)
|
||||||
|
toIntervalMinute(number)
|
||||||
|
toIntervalHour(number)
|
||||||
|
toIntervalDay(number)
|
||||||
|
toIntervalWeek(number)
|
||||||
|
toIntervalMonth(number)
|
||||||
|
toIntervalQuarter(number)
|
||||||
|
toIntervalYear(number)
|
||||||
|
```
|
||||||
|
|
||||||
|
**Parameters**
|
||||||
|
|
||||||
|
- `number` — Duration of interval. Positive integer number.
|
||||||
|
|
||||||
|
**Returned values**
|
||||||
|
|
||||||
|
- The value in `Interval` data type.
|
||||||
|
|
||||||
|
**Example**
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
WITH
|
WITH
|
||||||
|
@ -1,69 +1,69 @@
|
|||||||
# Operators
|
# Operators
|
||||||
|
|
||||||
All operators are transformed to the corresponding functions at the query parsing stage, in accordance with their precedence and associativity.
|
All operators are transformed to their corresponding functions at the query parsing stage in accordance with their precedence and associativity.
|
||||||
Groups of operators are listed in order of priority (the higher it is in the list, the earlier the operator is connected to its arguments).
|
Groups of operators are listed in order of priority (the higher it is in the list, the earlier the operator is connected to its arguments).
|
||||||
|
|
||||||
## Access Operators
|
## Access Operators
|
||||||
|
|
||||||
`a[N]` Access to an element of an array; ` arrayElement(a, N) function`.
|
`a[N]` – Access to an element of an array. The `arrayElement(a, N)` function.
|
||||||
|
|
||||||
`a.N` – Access to a tuple element; `tupleElement(a, N)` function.
|
`a.N` – Access to a tuple element. The `tupleElement(a, N)` function.
|
||||||
|
|
||||||
## Numeric Negation Operator
|
## Numeric Negation Operator
|
||||||
|
|
||||||
`-a` – The `negate (a)` function.
|
`-a` – The `negate (a)` function.
|
||||||
|
|
||||||
## Multiplication and Division Operators
|
## Multiplication and Division Operators
|
||||||
|
|
||||||
`a * b` – The `multiply (a, b) function.`
|
`a * b` – The `multiply (a, b)` function.
|
||||||
|
|
||||||
`a / b` – The ` divide(a, b) function.`
|
`a / b` – The `divide(a, b)` function.
|
||||||
|
|
||||||
`a % b` – The `modulo(a, b) function.`
|
`a % b` – The `modulo(a, b)` function.
|
||||||
|
|
||||||
## Addition and Subtraction Operators
|
## Addition and Subtraction Operators
|
||||||
|
|
||||||
`a + b` – The `plus(a, b) function.`
|
`a + b` – The `plus(a, b)` function.
|
||||||
|
|
||||||
`a - b` – The `minus(a, b) function.`
|
`a - b` – The `minus(a, b)` function.
|
||||||
|
|
||||||
## Comparison Operators
|
## Comparison Operators
|
||||||
|
|
||||||
`a = b` – The `equals(a, b) function.`
|
`a = b` – The `equals(a, b)` function.
|
||||||
|
|
||||||
`a == b` – The ` equals(a, b) function.`
|
`a == b` – The `equals(a, b)` function.
|
||||||
|
|
||||||
`a != b` – The `notEquals(a, b) function.`
|
`a != b` – The `notEquals(a, b)` function.
|
||||||
|
|
||||||
`a <> b` – The `notEquals(a, b) function.`
|
`a <> b` – The `notEquals(a, b)` function.
|
||||||
|
|
||||||
`a <= b` – The `lessOrEquals(a, b) function.`
|
`a <= b` – The `lessOrEquals(a, b)` function.
|
||||||
|
|
||||||
`a >= b` – The `greaterOrEquals(a, b) function.`
|
`a >= b` – The `greaterOrEquals(a, b)` function.
|
||||||
|
|
||||||
`a < b` – The `less(a, b) function.`
|
`a < b` – The `less(a, b)` function.
|
||||||
|
|
||||||
`a > b` – The `greater(a, b) function.`
|
`a > b` – The `greater(a, b)` function.
|
||||||
|
|
||||||
`a LIKE s` – The `like(a, b) function.`
|
`a LIKE s` – The `like(a, b)` function.
|
||||||
|
|
||||||
`a NOT LIKE s` – The `notLike(a, b) function.`
|
`a NOT LIKE s` – The `notLike(a, b)` function.
|
||||||
|
|
||||||
`a BETWEEN b AND c` – The same as `a >= b AND a <= c.`
|
`a BETWEEN b AND c` – The same as `a >= b AND a <= c`.
|
||||||
|
|
||||||
`a NOT BETWEEN b AND c` – The same as `a < b OR a > c.`
|
`a NOT BETWEEN b AND c` – The same as `a < b OR a > c`.
|
||||||
|
|
||||||
## Operators for Working With Data Sets
|
## Operators for Working With Data Sets
|
||||||
|
|
||||||
*See the section [IN operators](select.md#select-in-operators).*
|
*See [IN operators](select.md#select-in-operators).*
|
||||||
|
|
||||||
`a IN ...` – The `in(a, b) function`
|
`a IN ...` – The `in(a, b)` function.
|
||||||
|
|
||||||
`a NOT IN ...` – The `notIn(a, b) function.`
|
`a NOT IN ...` – The `notIn(a, b)` function.
|
||||||
|
|
||||||
`a GLOBAL IN ...` – The `globalIn(a, b) function.`
|
`a GLOBAL IN ...` – The `globalIn(a, b)` function.
|
||||||
|
|
||||||
`a GLOBAL NOT IN ...` – The `globalNotIn(a, b) function.`
|
`a GLOBAL NOT IN ...` – The `globalNotIn(a, b)` function.
|
||||||
|
|
||||||
## Operators for Working with Dates and Times {#operators-datetime}
|
## Operators for Working with Dates and Times {#operators-datetime}
|
||||||
|
|
||||||
@ -144,7 +144,7 @@ Types of intervals:
|
|||||||
- `YEAR`
|
- `YEAR`
|
||||||
|
|
||||||
!!! warning "Warning"
|
!!! warning "Warning"
|
||||||
Intervals of different types can't be combined. You can't use the expressions like `INTERVAL 4 DAY 1 HOUR`. Express intervals in the units that smaller or equal the the smallest unit of the interval, for example `INTERVAL 25 HOUR`. Also you can use consequtive operations like in the example below.
|
Intervals with different types can't be combined. You can't use expressions like `INTERVAL 4 DAY 1 HOUR`. Express intervals in units that are smaller or equal the the smallest unit of the interval, for example `INTERVAL 25 HOUR`. You can use consequtive operations like in the example below.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
@ -164,19 +164,19 @@ SELECT now() AS current_date_time, current_date_time + INTERVAL 4 DAY + INTERVAL
|
|||||||
|
|
||||||
## Logical Negation Operator
|
## Logical Negation Operator
|
||||||
|
|
||||||
`NOT a` The `not(a) function.`
|
`NOT a` – The `not(a)` function.
|
||||||
|
|
||||||
## Logical AND Operator
|
## Logical AND Operator
|
||||||
|
|
||||||
`a AND b` – The`and(a, b) function.`
|
`a AND b` – The`and(a, b)` function.
|
||||||
|
|
||||||
## Logical OR Operator
|
## Logical OR Operator
|
||||||
|
|
||||||
`a OR b` – The `or(a, b) function.`
|
`a OR b` – The `or(a, b)` function.
|
||||||
|
|
||||||
## Conditional Operator
|
## Conditional Operator
|
||||||
|
|
||||||
`a ? b : c` – The `if(a, b, c) function.`
|
`a ? b : c` – The `if(a, b, c)` function.
|
||||||
|
|
||||||
Note:
|
Note:
|
||||||
|
|
||||||
|
74
docs/ru/data_types/special_data_types/interval.md
Normal file
74
docs/ru/data_types/special_data_types/interval.md
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
# Interval {#data-type-interval}
|
||||||
|
|
||||||
|
Семейство типов данных, представляющих интервалы дат и времени. Оператор [INTERVAL](../../query_language/operators.md#operator-interval) возвращает значения этих типов.
|
||||||
|
|
||||||
|
!!! warning "Внимание"
|
||||||
|
Нельзя использовать типы данных `Interval` для хранения данных в таблице.
|
||||||
|
|
||||||
|
Структура:
|
||||||
|
|
||||||
|
- Интервал времени в виде положительного целого числа.
|
||||||
|
- Тип интервала.
|
||||||
|
|
||||||
|
Поддержанные типы интервалов:
|
||||||
|
|
||||||
|
- `SECOND`
|
||||||
|
- `MINUTE`
|
||||||
|
- `HOUR`
|
||||||
|
- `DAY`
|
||||||
|
- `WEEK`
|
||||||
|
- `MONTH`
|
||||||
|
- `QUARTER`
|
||||||
|
- `YEAR`
|
||||||
|
|
||||||
|
Каждому типу интервала соответствует отдельный тип данных. Например, тип данных `IntervalDay` соответствует интервалу `DAY`:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
SELECT toTypeName(INTERVAL 4 DAY)
|
||||||
|
```
|
||||||
|
```text
|
||||||
|
┌─toTypeName(toIntervalDay(4))─┐
|
||||||
|
│ IntervalDay │
|
||||||
|
└──────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
## Использование {#data-type-interval-usage-remarks}
|
||||||
|
|
||||||
|
Значения типов `Interval` можно использовать в арифметических операциях со значениями типов [Date](../../data_types/date.md) и [DateTime](../../data_types/datetime.md). Например, можно добавить 4 дня к текущей дате:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
SELECT now() as current_date_time, current_date_time + INTERVAL 4 DAY
|
||||||
|
```
|
||||||
|
```text
|
||||||
|
┌───current_date_time─┬─plus(now(), toIntervalDay(4))─┐
|
||||||
|
│ 2019-10-23 10:58:45 │ 2019-10-27 10:58:45 │
|
||||||
|
└─────────────────────┴───────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
Нельзя объединять интервалы различных типов. Нельзя использовать интервалы вида `4 DAY 1 HOUR`. Вместо этого выражайте интервал в единицах меньших или равных минимальной единице интервала, например, интервал "1 день и 1 час" можно выразить как `25 HOUR` или `90000 SECOND`.
|
||||||
|
|
||||||
|
Арифметические операции со значениями типов `Interval` не доступны, однако можно последовательно добавлять различные интервалы к значениям типов `Date` и `DateTime`. Например:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
SELECT now() AS current_date_time, current_date_time + INTERVAL 4 DAY + INTERVAL 3 HOUR
|
||||||
|
```
|
||||||
|
```text
|
||||||
|
┌───current_date_time─┬─plus(plus(now(), toIntervalDay(4)), toIntervalHour(3))─┐
|
||||||
|
│ 2019-10-23 11:16:28 │ 2019-10-27 14:16:28 │
|
||||||
|
└─────────────────────┴────────────────────────────────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
Следующий запрос приведёт к генерированию исключения:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
select now() AS current_date_time, current_date_time + (INTERVAL 4 DAY + INTERVAL 3 HOUR)
|
||||||
|
```
|
||||||
|
```text
|
||||||
|
Received exception from server (version 19.14.1):
|
||||||
|
Code: 43. DB::Exception: Received from localhost:9000. DB::Exception: Wrong argument types for function plus: if one argument is Interval, then another must be Date or DateTime..
|
||||||
|
```
|
||||||
|
|
||||||
|
## Смотрите также
|
||||||
|
|
||||||
|
- Оператор[INTERVAL](../../query_language/operators.md#operator-interval)
|
||||||
|
- Функция приведения типа [toInterval](../../query_language/functions/type_conversion_functions.md#function-tointerval)
|
@ -349,4 +349,48 @@ SELECT toTypeName(CAST(x, 'Nullable(UInt16)')) FROM t_null
|
|||||||
└─────────────────────────────────────────┘
|
└─────────────────────────────────────────┘
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## toInterval(Year|Quarter|Month|Week|Day|Hour|Minute|Second) {#function-tointerval}
|
||||||
|
|
||||||
|
Приводит аргумент из числового типа данных к типу данных [IntervalType](../../data_types/special_data_types/interval.md).
|
||||||
|
|
||||||
|
**Синтксис**
|
||||||
|
|
||||||
|
```sql
|
||||||
|
toIntervalSecond(number)
|
||||||
|
toIntervalMinute(number)
|
||||||
|
toIntervalHour(number)
|
||||||
|
toIntervalDay(number)
|
||||||
|
toIntervalWeek(number)
|
||||||
|
toIntervalMonth(number)
|
||||||
|
toIntervalQuarter(number)
|
||||||
|
toIntervalYear(number)
|
||||||
|
```
|
||||||
|
|
||||||
|
**Параметры**
|
||||||
|
|
||||||
|
- `number` — длительность интервала. Положительное целое число.
|
||||||
|
|
||||||
|
**Возвращаемые значения**
|
||||||
|
|
||||||
|
- Значение с типом данных `Interval`.
|
||||||
|
|
||||||
|
**Пример**
|
||||||
|
|
||||||
|
```sql
|
||||||
|
WITH
|
||||||
|
toDate('2019-01-01') AS date,
|
||||||
|
INTERVAL 1 WEEK AS interval_week,
|
||||||
|
toIntervalWeek(1) AS interval_to_week
|
||||||
|
SELECT
|
||||||
|
date + interval_week,
|
||||||
|
date + interval_to_week
|
||||||
|
```
|
||||||
|
|
||||||
|
```text
|
||||||
|
┌─plus(date, interval_week)─┬─plus(date, interval_to_week)─┐
|
||||||
|
│ 2019-01-08 │ 2019-01-08 │
|
||||||
|
└───────────────────────────┴──────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
[Оригинальная статья](https://clickhouse.yandex/docs/ru/query_language/functions/type_conversion_functions/) <!--hide-->
|
[Оригинальная статья](https://clickhouse.yandex/docs/ru/query_language/functions/type_conversion_functions/) <!--hide-->
|
||||||
|
@ -67,6 +67,8 @@
|
|||||||
|
|
||||||
## Оператор для работы с датами и временем {#operators-datetime}
|
## Оператор для работы с датами и временем {#operators-datetime}
|
||||||
|
|
||||||
|
### EXTRACT
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
EXTRACT(part FROM date);
|
EXTRACT(part FROM date);
|
||||||
```
|
```
|
||||||
@ -128,6 +130,39 @@ FROM test.Orders;
|
|||||||
|
|
||||||
Больше примеров приведено в [тестах](https://github.com/ClickHouse/ClickHouse/blob/master/dbms/tests/queries/0_stateless/00619_extract.sql).
|
Больше примеров приведено в [тестах](https://github.com/ClickHouse/ClickHouse/blob/master/dbms/tests/queries/0_stateless/00619_extract.sql).
|
||||||
|
|
||||||
|
### INTERVAL {#operator-interval}
|
||||||
|
|
||||||
|
Создаёт значение типа [Interval](../data_types/special_data_types/interval.md) которое должно использоваться в арифметических операциях со значениями типов [Date](../data_types/date.md) и [DateTime](../data_types/datetime.md).
|
||||||
|
|
||||||
|
Типы интервалов:
|
||||||
|
- `SECOND`
|
||||||
|
- `MINUTE`
|
||||||
|
- `HOUR`
|
||||||
|
- `DAY`
|
||||||
|
- `WEEK`
|
||||||
|
- `MONTH`
|
||||||
|
- `QUARTER`
|
||||||
|
- `YEAR`
|
||||||
|
|
||||||
|
!!! warning "Внимание"
|
||||||
|
Интервалы различных типов нельзя объединять. Нельзя использовать выражения вида `INTERVAL 4 DAY 1 HOUR`. Вместо этого интервалы можно выразить в единицах меньших или равных наименьшей единице интервала, Например, `INTERVAL 25 HOUR`. Также можно выполнять последовательные операции как показано в примере ниже.
|
||||||
|
|
||||||
|
Пример:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
SELECT now() AS current_date_time, current_date_time + INTERVAL 4 DAY + INTERVAL 3 HOUR
|
||||||
|
```
|
||||||
|
```text
|
||||||
|
┌───current_date_time─┬─plus(plus(now(), toIntervalDay(4)), toIntervalHour(3))─┐
|
||||||
|
│ 2019-10-23 11:16:28 │ 2019-10-27 14:16:28 │
|
||||||
|
└─────────────────────┴────────────────────────────────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
**Смотрите также**
|
||||||
|
|
||||||
|
- Тип данных [Interval](../data_types/special_data_types/interval.md)
|
||||||
|
- Функции преобразования типов [toInterval](functions/type_conversion_functions.md#function-tointerval)
|
||||||
|
|
||||||
## Оператор логического отрицания
|
## Оператор логического отрицания
|
||||||
|
|
||||||
`NOT a` - функция `not(a)`
|
`NOT a` - функция `not(a)`
|
||||||
|
@ -174,6 +174,7 @@ nav:
|
|||||||
- 'Expression': 'data_types/special_data_types/expression.md'
|
- 'Expression': 'data_types/special_data_types/expression.md'
|
||||||
- 'Set': 'data_types/special_data_types/set.md'
|
- 'Set': 'data_types/special_data_types/set.md'
|
||||||
- 'Nothing': 'data_types/special_data_types/nothing.md'
|
- 'Nothing': 'data_types/special_data_types/nothing.md'
|
||||||
|
- 'Interval': 'data_types/special_data_types/interval.md'
|
||||||
- 'Domains':
|
- 'Domains':
|
||||||
- 'Overview': 'data_types/domains/overview.md'
|
- 'Overview': 'data_types/domains/overview.md'
|
||||||
- 'IPv4': 'data_types/domains/ipv4.md'
|
- 'IPv4': 'data_types/domains/ipv4.md'
|
||||||
|
Loading…
Reference in New Issue
Block a user