Перейти к основному содержанию
Перейти к основному содержанию

Функции преобразования типов

Общие проблемы при преобразовании данных

ClickHouse в целом использует то же поведение, что и программы на C++.

Функции to<type> и cast в некоторых случаях ведут себя по‑разному, например, для LowCardinality: cast удаляет признак LowCardinality, а функции to<type> — нет. То же самое относится к Nullable; это поведение несовместимо со стандартом SQL, и его можно изменить с помощью настройки cast_keep_nullable.

Примечание

Имейте в виду возможную потерю данных, если значения одного типа данных преобразуются в меньший тип данных (например, из Int64 в Int32) или между несовместимыми типами данных (например, из String в Int). Тщательно проверяйте, что результат соответствует ожиданиям.

Пример:

SELECT
    toTypeName(toLowCardinality('') AS val) AS source_type,
    toTypeName(toString(val)) AS to_type_result_type,
    toTypeName(CAST(val, 'String')) AS cast_result_type

┌─source_type────────────┬─to_type_result_type────┬─cast_result_type─┐
│ LowCardinality(String) │ LowCardinality(String) │ String           │
└────────────────────────┴────────────────────────┴──────────────────┘

SELECT
    toTypeName(toNullable('') AS val) AS source_type,
    toTypeName(toString(val)) AS to_type_result_type,
    toTypeName(CAST(val, 'String')) AS cast_result_type

┌─source_type──────┬─to_type_result_type─┬─cast_result_type─┐
│ Nullable(String) │ Nullable(String)    │ String           │
└──────────────────┴─────────────────────┴──────────────────┘

SELECT
    toTypeName(toNullable('') AS val) AS source_type,
    toTypeName(toString(val)) AS to_type_result_type,
    toTypeName(CAST(val, 'String')) AS cast_result_type
SETTINGS cast_keep_nullable = 1

┌─source_type──────┬─to_type_result_type─┬─cast_result_type─┐
│ Nullable(String) │ Nullable(String)    │ Nullable(String) │
└──────────────────┴─────────────────────┴──────────────────┘

Примечания к функциям toString

Семейство функций toString позволяет выполнять преобразования между числами, строками (но не фиксированными строками), датами и датами со временем. Все эти функции принимают один аргумент.

  • При преобразовании в строку или из строки значение форматируется или разбирается по тем же правилам, что и для формата TabSeparated (и почти всех других текстовых форматов). Если строку не удаётся разобрать, генерируется исключение и запрос отменяется.
  • При преобразовании дат в числа или наоборот дате соответствует количество дней, прошедших с начала эпохи Unix.
  • При преобразовании дат со временем в числа или наоборот дате со временем соответствует количество секунд, прошедших с начала эпохи Unix.
  • Функция toString с аргументом типа DateTime может принимать второй аргумент типа String, содержащий имя часового пояса, например: Europe/Amsterdam. В этом случае время форматируется в соответствии с указанным часовым поясом.

Примечания о функциях toDate/toDateTime

Форматы даты и даты со временем для функций toDate/toDateTime определены следующим образом:

YYYY-MM-DD
YYYY-MM-DD hh:mm:ss

В качестве исключения при преобразовании из числовых типов UInt32, Int32, UInt64 или Int64 в Date, если число больше либо равно 65536, оно интерпретируется как Unix‑таймстемп (а не как количество дней) и округляется до даты. Это позволяет поддерживать распространённый случай записи toDate(unix_timestamp), который в противном случае привёл бы к ошибке и потребовал бы более громоздкой конструкции toDate(toDateTime(unix_timestamp)).

Преобразование между датой и датой со временем выполняется естественным образом: путём добавления нулевого времени или отбрасывания времени.

Преобразование между числовыми типами использует те же правила, что и присваивание между различными числовыми типами в C++.

Пример

Запрос:

SELECT
    now() AS ts,
    time_zone,
    toString(ts, time_zone) AS str_tz_datetime
FROM system.time_zones
WHERE time_zone LIKE 'Europe%'
LIMIT 10

Результат:

┌──────────────────ts─┬─time_zone─────────┬─str_tz_datetime─────┐
│ 2023-09-08 19:14:59 │ Europe/Amsterdam  │ 2023-09-08 21:14:59 │
│ 2023-09-08 19:14:59 │ Europe/Andorra    │ 2023-09-08 21:14:59 │
│ 2023-09-08 19:14:59 │ Europe/Astrakhan  │ 2023-09-08 23:14:59 │
│ 2023-09-08 19:14:59 │ Europe/Athens     │ 2023-09-08 22:14:59 │
│ 2023-09-08 19:14:59 │ Europe/Belfast    │ 2023-09-08 20:14:59 │
│ 2023-09-08 19:14:59 │ Europe/Belgrade   │ 2023-09-08 21:14:59 │
│ 2023-09-08 19:14:59 │ Europe/Berlin     │ 2023-09-08 21:14:59 │
│ 2023-09-08 19:14:59 │ Europe/Bratislava │ 2023-09-08 21:14:59 │
│ 2023-09-08 19:14:59 │ Europe/Brussels   │ 2023-09-08 21:14:59 │
│ 2023-09-08 19:14:59 │ Europe/Bucharest  │ 2023-09-08 22:14:59 │
└─────────────────────┴───────────────────┴─────────────────────┘

См. также функцию toUnixTimestamp.

toBool

Преобразует входное значение в значение типа Bool. В случае ошибки вызывает исключение.

Синтаксис

toBool(expr)

Аргументы

  • expr — выражение, возвращающее число или строку. Выражение.

Поддерживаемые аргументы:

  • Значения типа (U)Int8/16/32/64/128/256.
  • Значения типа Float32/64.
  • Строки true или false (без учета регистра).

Возвращаемое значение

  • Возвращает true или false в зависимости от результата вычисления аргумента. Bool.

Пример

Запрос:

SELECT
    toBool(toUInt8(1)),
    toBool(toInt8(-1)),
    toBool(toFloat32(1.01)),
    toBool('true'),
    toBool('false'),
    toBool('FALSE')
FORMAT Vertical

Результат:

toBool(toUInt8(1)):      true
toBool(toInt8(-1)):      true
toBool(toFloat32(1.01)): true
toBool('true'):          true
toBool('false'):         false
toBool('FALSE'):         false

toInt8

Преобразует входное значение в значение типа Int8. В случае ошибки выбрасывает исключение.

Синтаксис

toInt8(expr)

Аргументы

  • expr — выражение, возвращающее число или строковое представление числа. Выражение.

Поддерживаемые аргументы:

  • Значения или строковые представления типов (U)Int8/16/32/64/128/256.
  • Значения типа Float32/64.

Неподдерживаемые аргументы:

  • Строковые представления значений типа Float32/64, включая NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toInt8('0xc0fe');.
Примечание

Если входное значение не может быть представлено в диапазоне Int8, происходит переполнение или выход за нижнюю границу (underflow) результата. Это не считается ошибкой. Например: SELECT toInt8(128) == -128;.

Возвращаемое значение

  • 8-битное целое число. Int8.
Примечание

Функция использует округление к нулю, то есть обрезает дробную часть числа.

Пример

Запрос:

SELECT
    toInt8(-8),
    toInt8(-8.8),
    toInt8('-8')
FORMAT Vertical;

Результат:

Строка 1:
──────
toInt8(-8):   -8
toInt8(-8.8): -8
toInt8('-8'): -8

См. также

toInt8OrZero

Как и функция toInt8, эта функция преобразует входное значение в значение типа Int8, но в случае ошибки возвращает 0.

Синтаксис

toInt8OrZero(x)

Аргументы

  • x — строковое представление числа. String.

Поддерживаемые аргументы:

  • Строковые представления чисел типов (U)Int8/16/32/128/256.

Неподдерживаемые аргументы (возвращается 0):

  • Строковые представления вещественных значений типов Float32/64, включая NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных чисел, например SELECT toInt8OrZero('0xc0fe');.
Примечание

Если входное значение не может быть представлено в пределах Int8, происходит переполнение или выход результата за допустимые границы. Это не считается ошибкой.

Возвращаемое значение

  • 8-битное целое число типа Int8 при успешном преобразовании, иначе 0.
Примечание

Функция использует округление к нулю, то есть отбрасывает дробную часть числа.

Пример

Запрос:

SELECT
    toInt8OrZero('-8'),
    toInt8OrZero('abc')
FORMAT Vertical;

Результат:

Строка 1:
──────
toInt8OrZero('-8'):  -8
toInt8OrZero('abc'): 0

См. также

toInt8OrNull

Подобно функции toInt8, эта функция преобразует входное значение к типу Int8, но в случае ошибки возвращает NULL.

Синтаксис

toInt8OrNull(x)

Аргументы

  • x — строковое представление числа. String.

Поддерживаемые аргументы:

  • Строковые представления чисел типов (U)Int8/16/32/128/256.

Неподдерживаемые аргументы (возвращают \N)

  • Строковые представления значений типов Float32/64, включая NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например: SELECT toInt8OrNull('0xc0fe');.
Примечание

Если входное значение не может быть представлено в пределах Int8, происходит переполнение или выход результата за допустимые границы. Это не считается ошибкой.

Возвращаемое значение

  • 8-битное целое число при успешном выполнении, иначе NULL. Int8 / NULL.
Примечание

Функция использует округление к нулю, то есть отбрасывает дробную часть числа.

Пример

Запрос:

SELECT
    toInt8OrNull('-8'),
    toInt8OrNull('abc')
FORMAT Vertical;

Результат:

Row 1:
──────
toInt8OrNull('-8'):  -8
toInt8OrNull('abc'): ᴺᵁᴸᴸ

См. также

toInt8OrDefault

Как и toInt8, эта функция преобразует входное значение в значение типа Int8, но в случае ошибки возвращает значение по умолчанию. Если значение default не передано, при ошибке возвращается 0.

Синтаксис

toInt8OrDefault(expr[, default])

Аргументы

  • expr — выражение, возвращающее число или строковое представление числа. Expression / String.
  • default (необязательный) — значение по умолчанию, которое возвращается, если преобразование к типу Int8 оказалось неуспешным. Int8.

Поддерживаемые аргументы:

  • Значения или строковые представления типов (U)Int8/16/32/64/128/256.
  • Значения типа Float32/64.

Аргументы, для которых возвращается значение по умолчанию:

  • Строковые представления значений Float32/64, включая NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toInt8OrDefault('0xc0fe', CAST('-1', 'Int8'));.
Примечание

Если входное значение не может быть представлено в пределах диапазона Int8, происходит переполнение или выход результата за нижнюю границу диапазона. Это не считается ошибкой.

Возвращаемое значение

  • 8-битное целое число при успешном преобразовании, иначе возвращается значение по умолчанию, если оно передано, или 0, если нет. Int8.
Примечание
  • Функция использует округление к нулю, то есть отбрасывает дробные разряды чисел.
  • Тип значения по умолчанию должен совпадать с типом приведения.

Пример

Запрос:

SELECT
    toInt8OrDefault('-8', CAST('-1', 'Int8')),
    toInt8OrDefault('abc', CAST('-1', 'Int8'))
FORMAT Vertical;

Результат:

Row 1:
──────
toInt8OrDefault('-8', CAST('-1', 'Int8')):  -8
toInt8OrDefault('abc', CAST('-1', 'Int8')): -1

См. также

toInt16

Преобразует входное значение в значение типа Int16. В случае ошибки выбрасывает исключение.

Синтаксис

toInt16(expr)

Аргументы

  • expr — выражение, возвращающее число или строковое представление числа. Expression.

Поддерживаемые аргументы:

  • Значения или строковые представления типов (U)Int8/16/32/64/128/256.
  • Значения типов Float32/64.

Неподдерживаемые аргументы:

  • Строковые представления значений Float32/64, включая NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toInt16('0xc0fe');.
Примечание

Если входное значение не может быть представлено в диапазоне Int16, происходит переполнение или выход результата за пределы диапазона. Это не считается ошибкой. Например: SELECT toInt16(32768) == -32768;.

Возвращаемое значение

  • 16-битное целочисленное значение. Int16.
Примечание

Функция использует округление к нулю, то есть отбрасывает дробную часть числа.

Пример

Запрос:

SELECT
    toInt16(-16),
    toInt16(-16.16),
    toInt16('-16')
FORMAT Vertical;

Результат:

Строка 1:
──────
toInt16(-16):    -16
toInt16(-16.16): -16
toInt16('-16'):  -16

См. также

toInt16OrZero

Аналогично функции toInt16, эта функция преобразует входное значение в значение типа Int16, но в случае ошибки возвращает 0.

Синтаксис

toInt16OrZero(x)

Аргументы

  • x — строковое представление числа. String.

Поддерживаемые аргументы:

  • Строковые представления (U)Int8/16/32/128/256.

Неподдерживаемые аргументы (возвращается 0):

  • Строковые представления значений Float32/64, включая NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toInt16OrZero('0xc0fe');.
Примечание

Если входное значение не может быть представлено в пределах диапазона Int16, происходит переполнение или выход результата за пределы диапазона. Это не считается ошибкой.

Возвращаемое значение

  • 16-битное целое значение при успешном выполнении, в противном случае 0. Int16.
Примечание

Функция использует округление к нулю, то есть отбрасывает дробную часть числа.

Пример

Запрос:

SELECT
    toInt16OrZero('-16'),
    toInt16OrZero('abc')
FORMAT Vertical;

Результат:

Строка 1:
──────
toInt16OrZero('-16'): -16
toInt16OrZero('abc'): 0

См. также

toInt16OrNull

Как и toInt16, эта функция преобразует входное значение в значение типа Int16, но при ошибке возвращает NULL.

Синтаксис

toInt16OrNull(x)

Аргументы

  • x — строковое представление числа. String.

Поддерживаемые аргументы:

  • Строковые представления (U)Int8/16/32/128/256.

Неподдерживаемые аргументы (возвращают \N)

  • Строковые представления значений Float32/64, включая NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toInt16OrNull('0xc0fe');.
Примечание

Если входное значение не может быть представлено в пределах диапазона Int16, происходит переполнение или, наоборот, выход результата за нижнюю границу диапазона (underflow). Это не считается ошибкой.

Возвращаемое значение

  • 16-битное целое значение в случае успешного выполнения, иначе NULL. Int16 / NULL.
Примечание

Функция использует округление к нулю, то есть отбрасывает дробную часть числа.

Пример

Запрос:

SELECT
    toInt16OrNull('-16'),
    toInt16OrNull('abc')
FORMAT Vertical;

Результат:

Строка 1:
──────
toInt16OrNull('-16'): -16
toInt16OrNull('abc'): ᴺᵁᴸᴸ

Смотрите также

toInt16OrDefault

Подобно функции toInt16, эта функция преобразует входное значение в значение типа Int16, но в случае ошибки возвращает значение по умолчанию. Если аргумент default не указан, то в случае ошибки возвращается 0.

Синтаксис

toInt16OrDefault(expr[, default])

Аргументы

  • expr — выражение, возвращающее число или строковое представление числа. Expression / String.
  • default (необязательный параметр) — значение по умолчанию, которое возвращается, если преобразование к типу Int16 завершилось неудачно. Int16.

Поддерживаемые аргументы:

  • Значения или строковые представления типов (U)Int8/16/32/64/128/256.
  • Значения типа Float32/64.

Аргументы, для которых возвращается значение по умолчанию:

  • Строковые представления значений Float32/64, включая NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например: SELECT toInt16OrDefault('0xc0fe', CAST('-1', 'Int16'));.
Примечание

Если входное значение не может быть представлено в диапазоне Int16, происходит переполнение или выход результата за нижнюю границу. Это не считается ошибкой.

Возвращаемое значение

  • 16-битное целое число при успешном преобразовании, в противном случае возвращается значение по умолчанию, если оно передано, или 0, если нет. Int16.
Примечание
  • Функция использует округление к нулю, то есть отбрасывает дробную часть числа.
  • Тип значения по умолчанию должен совпадать с типом, к которому выполняется приведение.

Пример

Запрос:

SELECT
    toInt16OrDefault('-16', CAST('-1', 'Int16')),
    toInt16OrDefault('abc', CAST('-1', 'Int16'))
FORMAT Vertical;

Результат:

Строка 1:
──────
toInt16OrDefault('-16', CAST('-1', 'Int16')): -16
toInt16OrDefault('abc', CAST('-1', 'Int16')): -1

См. также

toInt32

Преобразует входное значение в значение типа Int32. В случае ошибки вызывает исключение.

Синтаксис

toInt32(expr)

Аргументы

  • expr — выражение, возвращающее число или строковое представление числа. Выражение.

Поддерживаемые аргументы:

  • Значения или строковые представления типов (U)Int8/16/32/64/128/256.
  • Значения типа Float32/64.

Неподдерживаемые аргументы:

  • Строковые представления значений Float32/64, включая NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toInt32('0xc0fe');.
Примечание

Если входное значение не может быть представлено в пределах диапазона Int32, происходит переполнение (over/underflow). Это не считается ошибкой. Например, SELECT toInt32(2147483648) == -2147483648;

Возвращаемое значение

  • 32-битное целое число. Int32.
Примечание

Функция использует округление к нулю, то есть отбрасывает дробную часть числа.

Пример

Запрос:

SELECT
    toInt32(-32),
    toInt32(-32.32),
    toInt32('-32')
FORMAT Vertical;

Результат:

Строка 1:
──────
toInt32(-32):    -32
toInt32(-32.32): -32
toInt32('-32'):  -32

См. также

toInt32OrZero

Подобно функции toInt32, эта функция преобразует входное значение к типу Int32, но возвращает 0 в случае ошибки.

Синтаксис

toInt32OrZero(x)

Аргументы

  • x — строковое представление числа. String.

Поддерживаемые аргументы:

  • Строковые представления (U)Int8/16/32/128/256.

Неподдерживаемые аргументы (возвращается 0):

  • Строковые представления значений Float32/64, включая NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toInt32OrZero('0xc0fe');.
Примечание

Если входное значение не может быть представлено в пределах диапазона Int32, происходит переполнение результата (overflow) или выход за нижнюю границу диапазона (underflow). Это не считается ошибкой.

Возвращаемое значение

  • 32-битное целочисленное значение в случае успешного преобразования, иначе 0. Int32
Примечание

Функция использует округление к нулю, то есть отбрасывает дробную часть числа.

Пример

Запрос:

SELECT
    toInt32OrZero('-32'),
    toInt32OrZero('abc')
FORMAT Vertical;

Результат:

Строка 1:
──────
toInt32OrZero('-32'): -32
toInt32OrZero('abc'): 0

См. также

toInt32OrNull

Аналогично функции toInt32, эта функция преобразует входное значение в значение типа Int32, но в случае ошибки возвращает NULL.

Синтаксис

toInt32OrNull(x)

Аргументы

  • x — строковое представление числа. String.

Поддерживаемые аргументы:

  • Строковые представления (U)Int8/16/32/128/256.

Неподдерживаемые аргументы (возвращают \N):

  • Строковые представления значений Float32/64, включая NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toInt32OrNull('0xc0fe');.
Примечание

Если входное значение не может быть представлено в пределах диапазона Int32, происходит переполнение или выход результата за пределы диапазона. Это не считается ошибкой.

Возвращаемое значение

  • 32-битное целое число в случае успеха, иначе NULL. Int32 / NULL.
Примечание

Функция использует округление к нулю, то есть усекает дробную часть числа.

Пример

Запрос:

SELECT
    toInt32OrNull('-32'),
    toInt32OrNull('abc')
FORMAT Vertical;

Результат:

Row 1:
──────
toInt32OrNull('-32'): -32
toInt32OrNull('abc'): ᴺᵁᴸᴸ

См. также

toInt32OrDefault

Подобно функции toInt32, эта функция преобразует входное значение в значение типа Int32, но в случае ошибки возвращает значение по умолчанию. Если аргумент default не передан, в случае ошибки возвращается 0.

Синтаксис

toInt32OrDefault(expr[, default])

Аргументы

  • expr — выражение, возвращающее число или строковое представление числа. Expression / String.
  • default (необязательный) — значение по умолчанию, возвращаемое в случае неуспешного преобразования к типу Int32. Int32.

Поддерживаемые аргументы:

  • Значения или строковые представления типов (U)Int8/16/32/64/128/256.
  • Значения типов Float32/64.

Аргументы, для которых возвращается значение по умолчанию:

  • Строковые представления значений Float32/64, включая NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например: SELECT toInt32OrDefault('0xc0fe', CAST('-1', 'Int32'));.
Примечание

Если входное значение не может быть представлено в пределах Int32, происходит переполнение или выход результата за нижнюю границу диапазона. Это не считается ошибкой.

Возвращаемое значение

  • 32-битное целое значение при успешном выполнении, в противном случае возвращается значение по умолчанию, если оно передано, или 0, если не передано. Int32.
Примечание
  • Функция использует округление к нулю, то есть отбрасывает дробную часть чисел.
  • Тип значения по умолчанию должен совпадать с целевым типом приведения.

Пример

Запрос:

SELECT
    toInt32OrDefault('-32', CAST('-1', 'Int32')),
    toInt32OrDefault('abc', CAST('-1', 'Int32'))
FORMAT Vertical;

Результат:

Row 1:
──────
toInt32OrDefault('-32', CAST('-1', 'Int32')): -32
toInt32OrDefault('abc', CAST('-1', 'Int32')): -1

См. также

toInt64

Преобразует входное значение в значение типа Int64. В случае ошибки выбрасывает исключение.

Синтаксис

toInt64(expr)

Аргументы

  • expr — выражение, возвращающее число или строковое представление числа. Expression.

Поддерживаемые аргументы:

  • Значения или строковые представления типов (U)Int8/16/32/64/128/256.
  • Значения типа Float32/64.

Неподдерживаемые типы:

  • Строковые представления значений Float32/64, включая NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toInt64('0xc0fe');.
Примечание

Если входное значение не может быть представлено в пределах диапазона Int64, происходит переполнение (overflow/underflow). Это не считается ошибкой. Например: SELECT toInt64(9223372036854775808) == -9223372036854775808;

Возвращаемое значение

  • 64-битное целое число. Int64.
Примечание

Функция использует округление к нулю, то есть отбрасывает дробную часть числа.

Пример

Запрос:

SELECT
    toInt64(-64),
    toInt64(-64.64),
    toInt64('-64')
FORMAT Vertical;

Результат:

Строка 1:
─────────
toInt64(-64):    -64
toInt64(-64.64): -64
toInt64('-64'):  -64

См. также

toInt64OrZero

Как и toInt64, эта функция преобразует входное значение в значение типа Int64, но в случае ошибки возвращает 0.

Синтаксис

toInt64OrZero(x)

Аргументы

  • x — строковое представление числа. String.

Поддерживаемые аргументы:

  • Строковые представления типов (U)Int8/16/32/128/256.

Неподдерживаемые аргументы (возвращают 0):

  • Строковые представления значений Float32/64, включая NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toInt64OrZero('0xc0fe');.
Примечание

Если входное значение не может быть представлено в пределах диапазона Int64, результат переполняется или выходит за нижнюю границу (underflow). Это не считается ошибкой.

Возвращаемое значение

  • 64-битное целое число в случае успешного преобразования, иначе 0. Int64.
Примечание

Функция использует округление к нулю, то есть отбрасывает дробную часть чисел.

Пример

Запрос:

SELECT
    toInt64OrZero('-64'),
    toInt64OrZero('abc')
FORMAT Vertical;

Результат:

Строка 1:
──────
toInt64OrZero('-64'): -64
toInt64OrZero('abc'): 0

См. также

toInt64OrNull

Аналогично функции toInt64, эта функция преобразует входное значение в значение типа Int64, но в случае ошибки возвращает NULL.

Синтаксис

toInt64OrNull(x)

Аргументы

  • x — строковое представление числа. Expression / String.

Поддерживаемые аргументы:

  • Строковые представления (U)Int8/16/32/128/256.

Неподдерживаемые аргументы (возвращают \N):

  • Строковые представления значений Float32/64, включая NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toInt64OrNull('0xc0fe');.
Примечание

Если входное значение не может быть представлено в пределах диапазона Int64, происходит переполнение или выход результата за нижнюю границу диапазона (underflow). Это не считается ошибкой.

Возвращаемое значение

  • 64-битное целочисленное значение при успешном выполнении, иначе NULL. Int64 / NULL.
Примечание

Функция использует округление к нулю, то есть отбрасывает дробные разряды чисел.

Пример

Запрос:

SELECT
    toInt64OrNull('-64'),
    toInt64OrNull('abc')
FORMAT Vertical;

Результат:

Строка 1:
──────
toInt64OrNull('-64'): -64
toInt64OrNull('abc'): ᴺᵁᴸᴸ

См. также

toInt64OrDefault

Как и toInt64, эта функция преобразует входное значение в значение типа Int64, но в случае ошибки возвращает значение по умолчанию. Если аргумент default не указан, то в случае ошибки возвращается 0.

Синтаксис

toInt64OrDefault(expr[, default])

Аргументы

  • expr — выражение, возвращающее число или строковое представление числа. Expression / String.
  • default (необязательный) — значение по умолчанию, которое возвращается, если преобразование к типу Int64 не удалось. Int64.

Поддерживаемые аргументы:

  • Значения или строковые представления типов (U)Int8/16/32/64/128/256.
  • Значения типов Float32/64.

Аргументы, для которых возвращается значение по умолчанию:

  • Строковые представления значений типов Float32/64, включая NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например: SELECT toInt64OrDefault('0xc0fe', CAST('-1', 'Int64'));.
Примечание

Если входное значение не может быть представлено в пределах диапазона Int64, происходит переполнение или выход результата за пределы диапазона. Это не считается ошибкой.

Возвращаемое значение

  • 64-битное целое число при успешном выполнении; в противном случае возвращается значение по умолчанию, если оно передано, или 0, если не передано. Int64.
Примечание
  • Функция использует округление к нулю, то есть отбрасывает дробную часть числа.
  • Тип значения по умолчанию должен совпадать с типом приведения.

Пример

Запрос:

SELECT
    toInt64OrDefault('-64', CAST('-1', 'Int64')),
    toInt64OrDefault('abc', CAST('-1', 'Int64'))
FORMAT Vertical;

Результат:

Строка 1:
──────
toInt64OrDefault('-64', CAST('-1', 'Int64')): -64
toInt64OrDefault('abc', CAST('-1', 'Int64')): -1

См. также

toInt128

Преобразует входное значение в значение типа Int128. В случае ошибки выбрасывает исключение.

Синтаксис

toInt128(expr)

Аргументы

  • expr — выражение, возвращающее число или строковое представление числа. Выражение.

Поддерживаемые аргументы:

  • Значения или строковые представления типов (U)Int8/16/32/64/128/256.
  • Значения типов Float32/64.

Неподдерживаемые аргументы:

  • Строковые представления значений типов Float32/64, включая NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toInt128('0xc0fe');.
Примечание

Если входное значение не может быть представлено в пределах диапазона Int128, происходит переполнение (выход за верхнюю или нижнюю границу диапазона). Это не считается ошибкой.

Возвращаемое значение

  • 128-битное целое число. Int128.
Примечание

Функция использует округление к нулю, то есть отбрасывает дробную часть чисел.

Пример

Запрос:

SELECT
    toInt128(-128),
    toInt128(-128.8),
    toInt128('-128')
FORMAT Vertical;

Результат:

Строка 1:
─────────
toInt128(-128):   -128
toInt128(-128.8): -128
toInt128('-128'): -128

См. также

toInt128OrZero

Подобно функции toInt128, преобразует входное значение в значение типа Int128, но в случае ошибки возвращает 0.

Синтаксис

toInt128OrZero(expr)

Аргументы

  • expr — выражение, возвращающее число или строковое представление числа. Expression / String.

Поддерживаемые аргументы:

  • Строковые представления (U)Int8/16/32/128/256.

Неподдерживаемые аргументы (возвращают 0):

  • Строковые представления значений Float32/64, включая NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toInt128OrZero('0xc0fe');.
Примечание

Если входное значение не может быть представлено в пределах диапазона Int128, происходит переполнение или выход за нижнюю границу (underflow) результата. Это не считается ошибкой.

Возвращаемое значение

  • 128-битное целое число при успешном преобразовании, иначе 0. Int128.
Примечание

Функция использует округление к нулю, то есть отбрасывает дробную часть чисел.

Пример

Запрос:

SELECT
    toInt128OrZero('-128'),
    toInt128OrZero('abc')
FORMAT Vertical;

Результат:

Строка 1:
──────
toInt128OrZero('-128'): -128
toInt128OrZero('abc'):  0

Смотрите также

toInt128OrNull

Как и toInt128, эта функция преобразует входное значение в значение типа Int128, но возвращает NULL в случае ошибки.

Синтаксис

toInt128OrNull(x)

Аргументы

Поддерживаемые аргументы:

  • Строковые представления (U)Int8/16/32/128/256.

Неподдерживаемые аргументы (возвращается \N):

  • Строковые представления значений Float32/64, включая NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toInt128OrNull('0xc0fe');.
Примечание

Если входное значение не может быть представлено в пределах диапазона Int128, происходит переполнение или выход результата за нижнюю границу диапазона. Это не считается ошибкой.

Возвращаемое значение

  • 128-битное целочисленное значение при успешном преобразовании, иначе NULL. Int128 / NULL.
Примечание

Функция использует округление к нулю, то есть отбрасывает дробную часть чисел.

Пример

Запрос:

SELECT
    toInt128OrNull('-128'),
    toInt128OrNull('abc')
FORMAT Vertical;

Результат:

Строка 1:
─────────
toInt128OrNull('-128'): -128
toInt128OrNull('abc'):  ᴺᵁᴸᴸ

См. также

toInt128OrDefault

Как и toInt128, эта функция преобразует входное значение в значение типа Int128, но в случае ошибки возвращает значение по умолчанию. Если аргумент default не указан, в случае ошибки возвращается 0.

Синтаксис

toInt128OrDefault(expr[, default])

Аргументы

  • expr — выражение, возвращающее число или строковое представление числа. Expression / String.
  • default (необязательный параметр) — значение по умолчанию, возвращаемое в случае неуспешного преобразования к типу Int128. Int128.

Поддерживаемые аргументы:

  • (U)Int8/16/32/64/128/256.
  • Float32/64.
  • Строковые представления (U)Int8/16/32/128/256.

Аргументы, для которых возвращается значение по умолчанию:

  • Строковые представления значений Float32/64, включая NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toInt128OrDefault('0xc0fe', CAST('-1', 'Int128'));.
Примечание

Если входное значение не может быть представлено в пределах диапазона Int128, происходит переполнение или выход результата за нижнюю границу диапазона. Это не считается ошибкой.

Возвращаемое значение

  • 128-битное целое число при успешном преобразовании; в противном случае возвращается значение по умолчанию, если оно передано, или 0, если нет. Int128.
Примечание
  • Функция использует округление к нулю, то есть отбрасывает дробную часть чисел.
  • Тип значения по умолчанию должен совпадать с целевым типом приведения.

Пример

Запрос:

SELECT
    toInt128OrDefault('-128', CAST('-1', 'Int128')),
    toInt128OrDefault('abc', CAST('-1', 'Int128'))
FORMAT Vertical;

Результат:

Строка 1:
──────
toInt128OrDefault('-128', CAST('-1', 'Int128')): -128
toInt128OrDefault('abc', CAST('-1', 'Int128')):  -1

Смотрите также

toInt256

Преобразует входное значение в значение типа Int256. В случае ошибки генерирует исключение.

Синтаксис

toInt256(expr)

Аргументы

  • expr — выражение, возвращающее число или строковое представление числа. Выражение.

Поддерживаемые аргументы:

  • Значения или строковые представления типов (U)Int8/16/32/64/128/256.
  • Значения типа Float32/64.

Неподдерживаемые аргументы:

  • Строковые представления значений Float32/64, включая NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toInt256('0xc0fe');.
Примечание

Если входное значение не может быть представлено в пределах диапазона Int256, результат выходит за границы этого диапазона. Это не считается ошибкой.

Возвращаемое значение

  • 256-битное целое число. Int256.
Примечание

Функция использует округление к нулю, то есть отбрасывает дробную часть числа.

Пример

Запрос:

SELECT
    toInt256(-256),
    toInt256(-256.256),
    toInt256('-256')
FORMAT Vertical;

Результат:

Строка 1:
──────
toInt256(-256):     -256
toInt256(-256.256): -256
toInt256('-256'):   -256

См. также

toInt256OrZero

Как и toInt256, эта функция преобразует входное значение в значение типа Int256, но в случае ошибки возвращает 0.

Синтаксис

toInt256OrZero(x)

Аргументы

  • x — строковое представление числа. String.

Поддерживаемые аргументы:

  • Строковые представления (U)Int8/16/32/128/256.

Неподдерживаемые аргументы (возвращают 0):

  • Строковые представления значений Float32/64, включая NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toInt256OrZero('0xc0fe');.
Примечание

Если входное значение не может быть представлено в пределах диапазона Int256, происходит переполнение или выход результата за пределы диапазона. Это не считается ошибкой.

Возвращаемое значение

  • 256-битное целое значение при успешном преобразовании, иначе 0. Int256.
Примечание

Функция использует округление к нулю, то есть отбрасывает дробные разряды чисел.

Пример

Запрос:

SELECT
    toInt256OrZero('-256'),
    toInt256OrZero('abc')
FORMAT Vertical;

Результат:

Строка 1:
─────────
toInt256OrZero('-256'): -256
toInt256OrZero('abc'):  0

См. также

toInt256OrNull

Подобно функции toInt256, эта функция преобразует входное значение в значение типа Int256, но возвращает NULL в случае ошибки.

Синтаксис

toInt256OrNull(x)

Аргументы

  • x — строковое представление числа. String.

Поддерживаемые аргументы:

  • Строковые представления (U)Int8/16/32/128/256.

Неподдерживаемые аргументы (возвращают \N)

  • Строковые представления значений Float32/64, включая NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toInt256OrNull('0xc0fe');.
Примечание

Если входное значение не может быть представлено в пределах диапазона Int256, происходит переполнение (overflow/underflow) результата. Это не считается ошибкой.

Возвращаемое значение

  • 256-битное целое число при успешном выполнении, иначе NULL. Int256 / NULL.
Примечание

Функция использует округление к нулю, то есть отсекает дробную часть числа.

Пример

Запрос:

SELECT
    toInt256OrNull('-256'),
    toInt256OrNull('abc')
FORMAT Vertical;

Результат:

Row 1:
──────
toInt256OrNull('-256'): -256
toInt256OrNull('abc'):  ᴺᵁᴸᴸ

См. также

toInt256OrDefault

Как и toInt256, эта функция преобразует входное значение в значение типа Int256, но в случае ошибки возвращает значение по умолчанию. Если аргумент default не передан, то в случае ошибки возвращается 0.

Синтаксис

toInt256OrDefault(expr[, default])

Аргументы

  • expr — выражение, возвращающее число или строковое представление числа. Expression / String.
  • default (необязательный) — значение по умолчанию, возвращаемое, если преобразование к типу Int256 не удалось. Int256.

Поддерживаемые аргументы:

  • Значения или строковые представления типов (U)Int8/16/32/64/128/256.
  • Значения типа Float32/64.

Аргументы, для которых возвращается значение по умолчанию:

  • Строковые представления значений Float32/64, включая NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toInt256OrDefault('0xc0fe', CAST('-1', 'Int256'));
Примечание

Если входное значение не может быть представлено в пределах диапазона Int256, происходит переполнение или антипереполнение результата. Это не считается ошибкой.

Возвращаемое значение

  • 256-битное целое число при успешном преобразовании, иначе возвращается значение по умолчанию, если оно передано, или 0, если нет. Int256.
Примечание
  • Функция использует округление к нулю, то есть отбрасывает дробную часть чисел.
  • Тип значения по умолчанию должен совпадать с типом приведения.

Пример

Запрос:

SELECT
    toInt256OrDefault('-256', CAST('-1', 'Int256')),
    toInt256OrDefault('abc', CAST('-1', 'Int256'))
FORMAT Vertical;

Результат:

Row 1:
──────
toInt256OrDefault('-256', CAST('-1', 'Int256')): -256
toInt256OrDefault('abc', CAST('-1', 'Int256')):  -1

См. также

toUInt8

Преобразует входное значение в значение типа UInt8. В случае ошибки выбрасывает исключение.

Синтаксис

toUInt8(expr)

Аргументы

  • expr — выражение, возвращающее число или строковое представление числа. Выражение.

Поддерживаемые аргументы:

  • Значения или строковые представления типов (U)Int8/16/32/64/128/256.
  • Значения типов Float32/64.

Неподдерживаемые аргументы:

  • Строковые представления значений типов Float32/64, включая NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toUInt8('0xc0fe');.
Примечание

Если входное значение не может быть представлено в пределах диапазона UInt8, происходит переполнение или выход результата за границы диапазона. Это не считается ошибкой. Например: SELECT toUInt8(256) == 0;.

Возвращаемое значение

  • 8-битное беззнаковое целое число. UInt8.
Примечание

Функция использует округление к нулю, то есть отбрасывает дробную часть числа.

Пример

Запрос:

SELECT
    toUInt8(8),
    toUInt8(8.8),
    toUInt8('8')
FORMAT Vertical;

Результат:

Строка 1:
─────────
toUInt8(8):   8
toUInt8(8.8): 8
toUInt8('8'): 8

См. также

toUInt8OrZero

Как и toUInt8, эта функция преобразует входное значение в значение типа UInt8, но при ошибке возвращает 0.

Синтаксис

toUInt8OrZero(x)

Аргументы

  • x — строковое представление числа. String.

Поддерживаемые аргументы:

  • Строковые представления (U)Int8/16/32/128/256.

Неподдерживаемые аргументы (возвращают 0):

  • Строковые представления обычных значений Float32/64, включая NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toUInt8OrZero('0xc0fe');.
Примечание

Если входное значение не может быть представлено в пределах диапазона UInt8, происходит переполнение или выход за нижнюю границу диапазона (underflow) результата. Это не считается ошибкой.

Возвращаемое значение

  • 8-битное беззнаковое целое число при успешном преобразовании, иначе 0. UInt8.
Примечание

Функция использует округление к нулю, то есть отбрасывает дробную часть числа.

Пример

Запрос:

SELECT
    toUInt8OrZero('-8'),
    toUInt8OrZero('abc')
FORMAT Vertical;

Результат:

Строка 1:
──────
toUInt8OrZero('-8'):  0
toUInt8OrZero('abc'): 0

См. также

toUInt8OrNull

Подобно функции toUInt8, эта функция преобразует входное значение в тип UInt8, но в случае ошибки возвращает NULL.

Синтаксис

toUInt8OrNull(x)

Аргументы

  • x — строковое представление числа. String.

Поддерживаемые аргументы:

  • Строковые представления (U)Int8/16/32/128/256.

Неподдерживаемые аргументы (возвращают \N):

  • Строковые представления значений Float32/64, включая NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toUInt8OrNull('0xc0fe');.
Примечание

Если входное значение не может быть представлено в пределах диапазона UInt8, происходит переполнение или выход результата за нижнюю границу диапазона (underflow). Это не считается ошибкой.

Возвращаемое значение

  • 8-битное беззнаковое целое число при успешном преобразовании, в противном случае NULL. UInt8 / NULL.
Примечание

Функция использует округление к нулю, то есть отбрасывает дробную часть числа.

Пример

Запрос:

SELECT
    toUInt8OrNull('8'),
    toUInt8OrNull('abc')
FORMAT Vertical;

Результат:

Row 1:
──────
toUInt8OrNull('8'):   8
toUInt8OrNull('abc'): ᴺᵁᴸᴸ

Смотрите также

toUInt8OrDefault

Как и функция toUInt8, эта функция преобразует входное значение в значение типа UInt8, но в случае ошибки возвращает значение по умолчанию. Если значение default не указано, в случае ошибки возвращается 0.

Синтаксис

toUInt8OrDefault(expr[, default])

Аргументы

  • expr — выражение, возвращающее число или строковое представление числа. Expression / String.
  • default (необязательный параметр) — значение по умолчанию, которое возвращается, если преобразование к типу UInt8 не удалось. UInt8.

Поддерживаемые аргументы:

  • Значения или строковые представления типов (U)Int8/16/32/64/128/256.
  • Значения типа Float32/64.

Аргументы, для которых возвращается значение по умолчанию:

  • Строковые представления значений Float32/64, включая NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toUInt8OrDefault('0xc0fe', CAST('0', 'UInt8'));.
Примечание

Если входное значение не может быть представлено в пределах допустимого диапазона UInt8, происходит переполнение или выход результата за нижнюю границу диапазона (underflow). Это не считается ошибкой.

Возвращаемое значение

  • 8-битное целое без знака при успешном преобразовании; в противном случае возвращается значение по умолчанию, если оно задано, или 0, если нет. UInt8.
Примечание
  • Функция использует округление к нулю, то есть отбрасывает дробную часть чисел.
  • Тип значения по умолчанию должен совпадать с типом, к которому выполняется приведение.

Пример

Запрос:

SELECT
    toUInt8OrDefault('8', CAST('0', 'UInt8')),
    toUInt8OrDefault('abc', CAST('0', 'UInt8'))
FORMAT Vertical;

Результат:

Строка 1:
──────
toUInt8OrDefault('8', CAST('0', 'UInt8')):   8
toUInt8OrDefault('abc', CAST('0', 'UInt8')): 0

См. также

toUInt16

Преобразует входное значение в значение типа UInt16. В случае ошибки выбрасывает исключение.

Синтаксис

toUInt16(expr)

Аргументы

  • expr — выражение, возвращающее число или строковое представление числа. Выражения.

Поддерживаемые аргументы:

  • Значения или строковые представления типов (U)Int8/16/32/64/128/256.
  • Значения типов Float32/64.

Неподдерживаемые аргументы:

  • Строковые представления значений Float32/64, включая NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toUInt16('0xc0fe');.
Примечание

Если входное значение не может быть представлено в пределах диапазона типа UInt16, происходит переполнение или потеря значимости результата. Это не считается ошибкой. Например: SELECT toUInt16(65536) == 0;.

Возвращаемое значение

  • 16-битное беззнаковое целое число. UInt16.
Примечание

Функция использует округление к нулю, то есть отбрасывает дробную часть числа.

Пример

Запрос:

SELECT
    toUInt16(16),
    toUInt16(16.16),
    toUInt16('16')
FORMAT Vertical;

Результат:

Строка 1:
─────────
toUInt16(16):    16
toUInt16(16.16): 16
toUInt16('16'):  16

См. также

toUInt16OrZero

Аналогично функции toUInt16, эта функция преобразует входное значение в значение типа UInt16, но в случае ошибки возвращает 0.

Синтаксис

toUInt16OrZero(x)

Аргументы

  • x — строковое представление числа. String.

Поддерживаемые аргументы:

  • Строковые представления типов (U)Int8/16/32/128/256.

Неподдерживаемые аргументы (возвращается 0):

  • Строковые представления значений Float32/64, включая NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toUInt16OrZero('0xc0fe');.
Примечание

Если входное значение не может быть представлено в пределах диапазона UInt16, происходит переполнение или выход за нижнюю границу результата. Это не считается ошибкой.

Возвращаемое значение

  • 16-битное беззнаковое целое число при успешном выполнении, иначе 0. UInt16.
Примечание

Функция использует округление к нулю, то есть отбрасывает дробную часть числа.

Пример

Запрос:

SELECT
    toUInt16OrZero('16'),
    toUInt16OrZero('abc')
FORMAT Vertical;

Результат:

Строка 1:
──────
toUInt16OrZero('16'):  16
toUInt16OrZero('abc'): 0

См. также

toUInt16OrNull

Аналогично функции toUInt16, эта функция преобразует входное значение в значение типа UInt16, но в случае ошибки возвращает NULL.

Синтаксис

toUInt16OrNull(x)

Аргументы

  • x — строковое представление числа. String.

Поддерживаемые аргументы:

  • Строковые представления (U)Int8/16/32/128/256.

Неподдерживаемые аргументы (возвращается \N)

  • Строковые представления значений типов Float32/64, включая NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toUInt16OrNull('0xc0fe');.
Примечание

Если входное значение не может быть представлено в пределах диапазона UInt16, происходит переполнение или выход результата за границы диапазона. Это не считается ошибкой.

Возвращаемое значение

  • 16-битное целое без знака при успешном преобразовании, иначе NULL. UInt16 / NULL.
Примечание

Функция использует округление к нулю, то есть отбрасывает дробную часть числа.

Пример

Запрос:

SELECT
    toUInt16OrNull('16'),
    toUInt16OrNull('abc')
FORMAT Vertical;

Результат:

Row 1:
──────
toUInt16OrNull('16'):  16
toUInt16OrNull('abc'): ᴺᵁᴸᴸ

См. также

toUInt16OrDefault

Подобно toUInt16, эта функция преобразует входное значение в значение типа UInt16, но в случае ошибки возвращает значение по умолчанию. Если аргумент default не передан, то в случае ошибки возвращается 0.

Синтаксис

toUInt16OrDefault(expr[, default])

Аргументы

  • expr — выражение, возвращающее число или строковое представление числа. Expression / String.
  • default (необязательный параметр) — значение по умолчанию, которое возвращается, если преобразование к типу UInt16 не удалось. UInt16.

Поддерживаемые аргументы:

  • Значения или строковые представления типа (U)Int8/16/32/64/128/256.
  • Значения типа Float32/64.

Аргументы, для которых возвращается значение по умолчанию:

  • Строковые представления значений Float32/64, включая NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toUInt16OrDefault('0xc0fe', CAST('0', 'UInt16'));.
Примечание

Если входное значение не может быть представлено в пределах диапазона UInt16, происходит переполнение или выход результата за пределы диапазона. Это не считается ошибкой.

Возвращаемое значение

  • 16-битное беззнаковое целое число при успешном преобразовании, в противном случае возвращается значение по умолчанию, если оно передано, или 0, если не передано. UInt16.
Примечание
  • Функция использует округление к нулю, то есть отбрасывает дробную часть числа.
  • Тип значения по умолчанию должен совпадать с целевым типом приведения.

Пример

Запрос:

SELECT
    toUInt16OrDefault('16', CAST('0', 'UInt16')),
    toUInt16OrDefault('abc', CAST('0', 'UInt16'))
FORMAT Vertical;

Результат:

Row 1:
──────
toUInt16OrDefault('16', CAST('0', 'UInt16')):  16
toUInt16OrDefault('abc', CAST('0', 'UInt16')): 0

См. также

toUInt32

Преобразует входное значение в значение типа UInt32. В случае ошибки выбрасывает исключение.

Синтаксис

toUInt32(expr)

Аргументы

  • expr — выражение, возвращающее число или строковое представление числа. Выражение.

Поддерживаемые аргументы:

  • Значения или строковые представления типа (U)Int8/16/32/64/128/256.
  • Значения типа Float32/64.

Неподдерживаемые аргументы:

  • Строковые представления значений Float32/64, включая NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toUInt32('0xc0fe');.
Примечание

Если входное значение не может быть представлено в пределах диапазона UInt32, происходит переполнение результата (вверх или вниз). Это не считается ошибкой. Например: SELECT toUInt32(4294967296) == 0;

Возвращаемое значение

  • 32-битное беззнаковое целое число. UInt32.
Примечание

Функция использует округление в сторону нуля, то есть отбрасывает дробную часть числа.

Пример

Запрос:

SELECT
    toUInt32(32),
    toUInt32(32.32),
    toUInt32('32')
FORMAT Vertical;

Результат:

Строка 1:
─────────
toUInt32(32):    32
toUInt32(32.32): 32
toUInt32('32'):  32

См. также

toUInt32OrZero

Аналогично функции toUInt32, преобразует входное значение в тип UInt32, но в случае ошибки возвращает 0.

Синтаксис

toUInt32OrZero(x)

Аргументы

  • x — строковое представление числа. String.

Поддерживаемые аргументы:

  • Строковые представления значений типов (U)Int8/16/32/128/256.

Неподдерживаемые аргументы (возвращают 0):

  • Строковые представления значений типов Float32/64, включая NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toUInt32OrZero('0xc0fe');.
Примечание

Если входное значение не может быть представлено в пределах UInt32, происходит переполнение или выход за нижнюю границу диапазона результата. Это не считается ошибкой.

Возвращаемое значение

  • 32-битное беззнаковое целое число при успешном выполнении, в противном случае 0. UInt32
Примечание

Функция использует округление к нулю , то есть отбрасывает дробную часть числа.

Пример

Запрос:

SELECT
    toUInt32OrZero('32'),
    toUInt32OrZero('abc')
FORMAT Vertical;

Результат:

Строка 1:
──────
toUInt32OrZero('32'):  32
toUInt32OrZero('abc'): 0

См. также

toUInt32OrNull

Как и toUInt32, эта функция преобразует входное значение в значение типа UInt32, но в случае ошибки возвращает NULL.

Синтаксис

toUInt32OrNull(x)

Аргументы

  • x — строковое представление числа. String.

Поддерживаемые аргументы:

  • Строковые представления (U)Int8/16/32/128/256.

Неподдерживаемые аргументы (возвращают \N):

  • Строковые представления значений Float32/64, включая NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toUInt32OrNull('0xc0fe');.
Примечание

Если входное значение не может быть представлено в пределах диапазона UInt32, происходит переполнение или выход результата за допустимые границы (underflow). Это не считается ошибкой.

Возвращаемое значение

  • 32-битное беззнаковое целое число в случае успешного преобразования, иначе NULL. UInt32 / NULL.
Примечание

Функция использует округление к нулю , то есть отбрасывает дробную часть числа.

Пример

Запрос:

SELECT
    toUInt32OrNull('32'),
    toUInt32OrNull('abc')
FORMAT Vertical;

Результат:

Строка 1:
──────
toUInt32OrNull('32'):  32
toUInt32OrNull('abc'): ᴺᵁᴸᴸ

См. также

toUInt32OrDefault

Как и функция toUInt32, эта функция преобразует входное значение в значение типа UInt32, но в случае ошибки возвращает значение по умолчанию. Если аргумент default не указан, в случае ошибки возвращается 0.

Синтаксис

toUInt32OrDefault(expr[, default])

Аргументы

  • expr — выражение, возвращающее число или строковое представление числа. Expression / String.
  • default (необязательный) — значение по умолчанию, возвращаемое при неудачном разборе в тип UInt32. UInt32.

Поддерживаемые аргументы:

  • Значения или строковые представления типов (U)Int8/16/32/64/128/256.
  • Значения типа Float32/64.

Аргументы, для которых возвращается значение по умолчанию:

  • Строковые представления значений Float32/64, включая NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toUInt32OrDefault('0xc0fe', CAST('0', 'UInt32'));.
Примечание

Если входное значение не может быть представлено в пределах UInt32, происходит переполнение или выход результата за границы допустимого диапазона. Это не считается ошибкой.

Возвращаемое значение

  • 32-битное беззнаковое целое значение при успешном преобразовании, в противном случае возвращается значение по умолчанию, если оно передано, или 0, если нет. UInt32.
Примечание
  • Функция использует округление к нулю, то есть отбрасывает дробную часть чисел.
  • Тип значения по умолчанию должен совпадать с типом приведения.

Пример

Запрос:

SELECT
    toUInt32OrDefault('32', CAST('0', 'UInt32')),
    toUInt32OrDefault('abc', CAST('0', 'UInt32'))
FORMAT Vertical;

Результат:

Строка 1:
──────
toUInt32OrDefault('32', CAST('0', 'UInt32')):  32
toUInt32OrDefault('abc', CAST('0', 'UInt32')): 0

Смотрите также

toUInt64

Преобразует входное значение в значение типа UInt64. В случае ошибки вызывает исключение.

Синтаксис

toUInt64(expr)

Аргументы

  • expr — выражение, возвращающее число или строковое представление числа. Выражение.

Поддерживаемые аргументы:

  • Значения или строковые представления типов (U)Int8/16/32/64/128/256.
  • Значения типа Float32/64.

Неподдерживаемые типы:

  • Строковые представления значений Float32/64, включая NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toUInt64('0xc0fe');.
Примечание

Если входное значение не может быть представлено в пределах диапазона UInt64, происходит переполнение по верхней или нижней границе. Это не считается ошибкой. Например: SELECT toUInt64(18446744073709551616) == 0;

Возвращаемое значение

  • 64-битное целое без знака. UInt64.
Примечание

Функция использует округление к нулю, то есть усекает дробную часть чисел.

Пример

Запрос:

SELECT
    toUInt64(64),
    toUInt64(64.64),
    toUInt64('64')
FORMAT Vertical;

Результат:

Строка 1:
─────────
toUInt64(64):    64
toUInt64(64.64): 64
toUInt64('64'):  64

См. также

toUInt64OrZero

Как и toUInt64, эта функция преобразует входное значение в значение типа UInt64, но в случае ошибки возвращает 0.

Синтаксис

toUInt64OrZero(x)

Аргументы

  • x — строковое представление числа. String.

Поддерживаемые аргументы:

  • Строковые представления чисел типов (U)Int8/16/32/128/256.

Неподдерживаемые аргументы (возвращается 0):

  • Строковые представления значений Float32/64, включая NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toUInt64OrZero('0xc0fe');.
Примечание

Если входное значение не может быть представлено в пределах UInt64, происходит переполнение или потеря значимости (underflow) результата. Это не считается ошибкой.

Возвращаемое значение

  • 64-битное беззнаковое целое число при успешном преобразовании, иначе 0. UInt64.
Примечание

Функция использует округление к нулю, то есть отбрасывает дробную часть числа.

Пример

Запрос:

SELECT
    toUInt64OrZero('64'),
    toUInt64OrZero('abc')
FORMAT Vertical;

Результат:

Строка 1:
──────
toUInt64OrZero('64'):  64
toUInt64OrZero('abc'): 0

См. также

toUInt64OrNull

Как и функция toUInt64, эта функция преобразует входное значение в значение типа UInt64, но в случае ошибки возвращает NULL.

Синтаксис

toUInt64OrNull(x)

Аргументы

  • x — строковое представление числа. Expression / String.

Поддерживаемые аргументы:

  • Строковые представления (U)Int8/16/32/128/256.

Неподдерживаемые аргументы (возвращают \N):

  • Строковые представления значений Float32/64, включая NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toUInt64OrNull('0xc0fe');.
Примечание

Если входное значение не может быть представлено в пределах диапазона UInt64, происходит переполнение или андерфлоу результата. Это не считается ошибкой.

Возвращаемое значение

  • 64-битное беззнаковое целое число при успешном преобразовании, иначе NULL. UInt64 / NULL.
Примечание

Функция использует округление к нулю, то есть отбрасывает дробную часть числа.

Пример

Запрос:

SELECT
    toUInt64OrNull('64'),
    toUInt64OrNull('abc')
FORMAT Vertical;

Результат:

Строка 1:
─────────
toUInt64OrNull('64'):  64
toUInt64OrNull('abc'): ᴺᵁᴸᴸ

См. также

toUInt64OrDefault

Как и toUInt64, эта функция преобразует входное значение к типу UInt64, но в случае ошибки возвращает значение по умолчанию. Если аргумент default не передан, в случае ошибки возвращается 0.

Синтаксис

toUInt64OrDefault(expr[, default])

Аргументы

  • expr — выражение, возвращающее число или строковое представление числа. Expression / String.
  • defauult (необязательный) — значение по умолчанию, которое возвращается, если преобразование к типу UInt64 завершилось неуспешно. UInt64.

Поддерживаемые аргументы:

  • Значения или строковые представления типов (U)Int8/16/32/64/128/256.
  • Значения типа Float32/64.

Аргументы, для которых возвращается значение по умолчанию:

  • Строковые представления значений Float32/64, включая NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например: SELECT toUInt64OrDefault('0xc0fe', CAST('0', 'UInt64'));.
Примечание

Если входное значение не может быть представлено в пределах диапазона UInt64, происходит переполнение или выход за нижнюю границу результата. Это не считается ошибкой.

Возвращаемое значение

  • 64-битное целое число без знака в случае успешного преобразования, иначе возвращается значение по умолчанию, если оно задано, или 0, если нет. UInt64.
Примечание
  • Функция использует округление к нулю, то есть отбрасывает дробную часть чисел.
  • Тип значения по умолчанию должен совпадать с типом приведения.

Пример

Запрос:

SELECT
    toUInt64OrDefault('64', CAST('0', 'UInt64')),
    toUInt64OrDefault('abc', CAST('0', 'UInt64'))
FORMAT Vertical;

Результат:

Строка 1:
──────
toUInt64OrDefault('64', CAST('0', 'UInt64')):  64
toUInt64OrDefault('abc', CAST('0', 'UInt64')): 0

См. также

toUInt128

Преобразует входное значение в значение типа UInt128. В случае ошибки вызывает исключение.

Синтаксис

toUInt128(expr)

Аргументы

  • expr — выражение, возвращающее число или строковое представление числа. Выражение.

Поддерживаемые аргументы:

  • Значения или строковые представления типов (U)Int8/16/32/64/128/256.
  • Значения типа Float32/64.

Неподдерживаемые аргументы:

  • Строковые представления значений Float32/64, включая NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toUInt128('0xc0fe');.
Примечание

Если входное значение не может быть представлено в пределах диапазона UInt128, результат выходит за верхнюю или нижнюю границу диапазона. Это не считается ошибкой.

Возвращаемое значение

  • 128-битное беззнаковое целое число. UInt128.
Примечание

Функция использует округление к нулю, то есть усечает дробную часть числа.

Пример

Запрос:

SELECT
    toUInt128(128),
    toUInt128(128.8),
    toUInt128('128')
FORMAT Vertical;

Результат:

Строка 1:
─────────
toUInt128(128):   128
toUInt128(128.8): 128
toUInt128('128'): 128

См. также

toUInt128OrZero

Подобно функции toUInt128, эта функция преобразует входное значение к типу UInt128, но в случае ошибки возвращает 0.

Синтаксис

toUInt128OrZero(expr)

Аргументы

  • expr — выражение, возвращающее число или строковое представление числа. Expression / String.

Поддерживаемые аргументы:

  • Строковые представления (U)Int8/16/32/128/256.

Неподдерживаемые аргументы (возвращают 0):

  • Строковые представления значений Float32/64, включая NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toUInt128OrZero('0xc0fe');.
Примечание

Если входное значение не может быть представлено в пределах диапазона UInt128, возникает переполнение или выход за нижнюю границу результата. Это не считается ошибкой.

Возвращаемое значение

  • 128-битное беззнаковое целое число при успешном преобразовании, иначе 0. UInt128.
Примечание

Функция использует округление к нулю, то есть отбрасывает дробную часть чисел.

Пример

Запрос:

SELECT
    toUInt128OrZero('128'),
    toUInt128OrZero('abc')
FORMAT Vertical;

Результат:

Строка 1:
──────
toUInt128OrZero('128'): 128
toUInt128OrZero('abc'): 0

См. также

toUInt128OrNull

Аналогично функции toUInt128, эта функция преобразует входное значение в значение типа UInt128, но при возникновении ошибки возвращает NULL.

Синтаксис

toUInt128OrNull(x)

Аргументы

  • x — строковое представление числа. Expression / String.

Поддерживаемые аргументы:

  • Строковые представления (U)Int8/16/32/128/256.

Неподдерживаемые аргументы (возвращают \N):

  • Строковые представления значений Float32/64, включая NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toUInt128OrNull('0xc0fe');.
Примечание

Если входное значение не может быть представлено в пределах диапазона UInt128, происходит переполнение или потеря значимости результата. Это не считается ошибкой.

Возвращаемое значение

  • 128-битное беззнаковое целое число при успешном преобразовании, иначе NULL. UInt128 / NULL.
Примечание

Функция использует округление в сторону нуля, то есть отбрасывает дробные цифры чисел.

Пример

Запрос:

SELECT
    toUInt128OrNull('128'),
    toUInt128OrNull('abc')
FORMAT Vertical;

Результат:

Строка 1:
──────
toUInt128OrNull('128'): 128
toUInt128OrNull('abc'): ᴺᵁᴸᴸ

См. также

toUInt128OrDefault

Аналогично функции toUInt128, эта функция преобразует входное значение в значение типа UInt128, но при ошибке возвращает значение по умолчанию. Если аргумент default не передан, то при ошибке возвращается 0.

Синтаксис

toUInt128OrDefault(expr[, default])

Аргументы

  • expr — выражение, возвращающее число или строковое представление числа. Expression / String.
  • default (необязательный) — значение по умолчанию, возвращаемое при неуспешной попытке преобразования к типу UInt128. UInt128.

Поддерживаемые аргументы:

  • (U)Int8/16/32/64/128/256.
  • Float32/64.
  • Строковые представления (U)Int8/16/32/128/256.

Аргументы, для которых возвращается значение по умолчанию:

  • Строковые представления значений Float32/64, включая NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toUInt128OrDefault('0xc0fe', CAST('0', 'UInt128'));.
Примечание

Если входное значение не может быть представлено в пределах диапазона UInt128, происходит переполнение или потеря точности результата. Это не считается ошибкой.

Возвращаемое значение

  • 128-битное беззнаковое целое значение при успешном преобразовании, иначе — значение по умолчанию, если оно передано, или 0, если не передано. UInt128.
Примечание
  • Функция использует округление к нулю, то есть отбрасывает дробную часть чисел.
  • Тип значения по умолчанию должен совпадать с типом приведения.

Пример

Запрос:

SELECT
    toUInt128OrDefault('128', CAST('0', 'UInt128')),
    toUInt128OrDefault('abc', CAST('0', 'UInt128'))
FORMAT Vertical;

Результат:

Row 1:
──────
toUInt128OrDefault('128', CAST('0', 'UInt128')): 128
toUInt128OrDefault('abc', CAST('0', 'UInt128')): 0

См. также

toUInt256

Преобразует входное значение в значение типа UInt256. В случае ошибки выбрасывает исключение.

Синтаксис

toUInt256(expr)

Аргументы

  • expr — выражение, возвращающее число или строковое представление числа. Expression.

Поддерживаемые аргументы:

  • Значения или строковые представления типов (U)Int8/16/32/64/128/256.
  • Значения типов Float32/64.

Неподдерживаемые аргументы:

  • Строковые представления значений типов Float32/64, включая NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toUInt256('0xc0fe');.
Примечание

Если входное значение не может быть представлено в пределах диапазона UInt256, результат выходит за верхнюю или нижнюю границу диапазона (переполнение/отрицательное переполнение). Это не считается ошибкой.

Возвращаемое значение

  • 256-битное беззнаковое целое значение. Int256.
Примечание

Функция использует округление к нулю, то есть отбрасывает дробную часть числа.

Пример

Запрос:

SELECT
    toUInt256(256),
    toUInt256(256.256),
    toUInt256('256')
FORMAT Vertical;

Результат:

Строка 1:
─────────
toUInt256(256):     256
toUInt256(256.256): 256
toUInt256('256'):   256

Смотрите также

toUInt256OrZero

Как и функция toUInt256, эта функция преобразует входное значение в значение типа UInt256, но в случае ошибки возвращает 0.

Синтаксис

toUInt256OrZero(x)

Аргументы

  • x — строковое представление числа. String.

Поддерживаемые аргументы:

  • Строковые представления чисел типов (U)Int8/16/32/128/256.

Неподдерживаемые аргументы (возвращается 0):

  • Строковые представления значений Float32/64, включая NaN и Inf.
  • Строковые представления чисел в двоичной и шестнадцатеричной форме, например SELECT toUInt256OrZero('0xc0fe');.
Примечание

Если входное значение не может быть представлено в пределах диапазона UInt256, происходит переполнение или выход за нижнюю границу результата. Это не считается ошибкой.

Возвращаемое значение

  • 256-битное беззнаковое целое число в случае успешного преобразования, иначе 0. UInt256.
Примечание

Функция использует округление к нулю, то есть отбрасывает дробную часть чисел.

Пример

Запрос:

SELECT
    toUInt256OrZero('256'),
    toUInt256OrZero('abc')
FORMAT Vertical;

Результат:

Строка 1:
──────
toUInt256OrZero('256'): 256
toUInt256OrZero('abc'): 0

См. также

toUInt256OrNull

Как и функция toUInt256, эта функция преобразует входное значение в значение типа UInt256, но при ошибке возвращает NULL.

Синтаксис

toUInt256OrNull(x)

Аргументы

  • x — строковое представление числа. String.

Поддерживаемые аргументы:

  • Строковые представления чисел типов (U)Int8/16/32/128/256.

Неподдерживаемые аргументы (возвращает \N)

  • Строковые представления значений Float32/64, включая NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toUInt256OrNull('0xc0fe');.
Примечание

Если входное значение не может быть представлено в пределах диапазона UInt256, происходит переполнение или выход результата за нижнюю границу диапазона. Это не считается ошибкой.

Возвращаемое значение

  • 256-битное беззнаковое целое число в случае успешного преобразования, иначе NULL. UInt256 / NULL.
Примечание

Функция использует округление к нулю, то есть отбрасывает дробную часть чисел.

Пример

Запрос:

SELECT
    toUInt256OrNull('256'),
    toUInt256OrNull('abc')
FORMAT Vertical;

Результат:

Строка 1:
──────
toUInt256OrNull('256'): 256
toUInt256OrNull('abc'): ᴺᵁᴸᴸ

См. также

toUInt256OrDefault

Как и toUInt256, эта функция преобразует входное значение в значение типа UInt256, но в случае ошибки возвращает значение по умолчанию. Если значение default не передано, то в случае ошибки возвращается 0.

Синтаксис

toUInt256OrDefault(expr[, default])

Аргументы

  • expr — выражение, возвращающее число или строковое представление числа. Expression / String.
  • default (необязательный) — значение по умолчанию, которое возвращается, если преобразование к типу UInt256 не удалось. UInt256.

Поддерживаемые аргументы:

  • Значения или строковые представления типов (U)Int8/16/32/64/128/256.
  • Значения типов Float32/64.

Аргументы, для которых возвращается значение по умолчанию:

  • Строковые представления значений типов Float32/64, включая NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toUInt256OrDefault('0xc0fe', CAST('0', 'UInt256'));
Примечание

Если входное значение не может быть представлено в пределах диапазона UInt256, происходит переполнение или потеря точности результата. Это не считается ошибкой.

Возвращаемое значение

  • 256-битное целое без знака при успешном преобразовании; в противном случае возвращается значение по умолчанию, если оно передано, или 0, если нет. UInt256.
Примечание
  • Функция использует округление к нулю, то есть отбрасывает дробную часть числа.
  • Тип значения по умолчанию должен совпадать с типом, к которому выполняется приведение.

Пример

Запрос:

SELECT
    toUInt256OrDefault('-256', CAST('0', 'UInt256')),
    toUInt256OrDefault('abc', CAST('0', 'UInt256'))
FORMAT Vertical;

Результат:

Строка 1:
──────
toUInt256OrDefault('-256', CAST('0', 'UInt256')): 0
toUInt256OrDefault('abc', CAST('0', 'UInt256')):  0

См. также

toFloat32

Преобразует входное значение в значение типа Float32. В случае ошибки выбрасывает исключение.

Синтаксис

toFloat32(expr)

Аргументы

  • expr — выражение, возвращающее число или строковое представление числа. Выражение.

Поддерживаемые аргументы:

  • Значения типов (U)Int8/16/32/64/128/256.
  • Строковые представления (U)Int8/16/32/128/256.
  • Значения типов Float32/64, включая NaN и Inf.
  • Строковые представления Float32/64, включая NaN и Inf (без учета регистра).

Неподдерживаемые аргументы:

  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toFloat32('0xc0fe');.

Возвращаемое значение

  • 32-битное число с плавающей запятой. Float32.

Пример

Запрос:

SELECT
    toFloat32(42.7),
    toFloat32('42.7'),
    toFloat32('NaN')
FORMAT Vertical;

Результат:

Строка 1:
──────
toFloat32(42.7):   42.7
toFloat32('42.7'): 42.7
toFloat32('NaN'):  nan

См. также

toFloat32OrZero

Как и функция toFloat32, эта функция преобразует входное значение к значению типа Float32, но в случае ошибки возвращает 0.

Синтаксис

toFloat32OrZero(x)

Аргументы

  • x — строковое представление числа. String.

Поддерживаемые аргументы:

  • Строковые представления типов (U)Int8/16/32/128/256, Float32/64.

Неподдерживаемые аргументы (возвращают 0):

  • Строковые представления двоичных и шестнадцатеричных значений, например: SELECT toFloat32OrZero('0xc0fe');.

Возвращаемое значение

  • Значение 32-битного числа с плавающей точкой при успешном преобразовании, иначе 0. Float32.

Пример

Запрос:

SELECT
    toFloat32OrZero('42.7'),
    toFloat32OrZero('abc')
FORMAT Vertical;

Результат:

Строка 1:
─────────
toFloat32OrZero('42.7'): 42.7
toFloat32OrZero('abc'):  0

Смотрите также

toFloat32OrNull

Как и toFloat32, эта функция преобразует входное значение в тип Float32, но возвращает NULL в случае ошибки.

Синтаксис

toFloat32OrNull(x)

Аргументы

  • x — строковое представление числа. String.

Поддерживаемые аргументы:

  • Строковые представления чисел типов (U)Int8/16/32/128/256, Float32/64.

Неподдерживаемые аргументы (возвращают \N):

  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toFloat32OrNull('0xc0fe');.

Возвращаемое значение

  • 32-битное значение типа Float32 при успешном преобразовании, иначе \N. Float32.

Пример

Запрос:

SELECT
    toFloat32OrNull('42.7'),
    toFloat32OrNull('abc')
FORMAT Vertical;

Результат:

Строка 1:
─────────
toFloat32OrNull('42.7'): 42.7
toFloat32OrNull('abc'):  ᴺᵁᴸᴸ

См. также

toFloat32OrDefault

Как и toFloat32, эта функция преобразует входное значение в значение типа Float32, но в случае ошибки возвращает значение по умолчанию. Если значение default не указано, то в случае ошибки возвращается 0.

Синтаксис

toFloat32OrDefault(expr[, default])

Аргументы

  • expr — выражение, возвращающее число или строковое представление числа. Expression / String.
  • default (необязательный) — значение по умолчанию, которое возвращается, если преобразование к типу Float32 завершается неудачей. Float32.

Поддерживаемые аргументы:

  • Значения типов (U)Int8/16/32/64/128/256.
  • Строковые представления (U)Int8/16/32/128/256.
  • Значения типов Float32/64, включая NaN и Inf.
  • Строковые представления Float32/64, включая NaN и Inf (без учета регистра).

Аргументы, для которых возвращается значение по умолчанию:

  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toFloat32OrDefault('0xc0fe', CAST('0', 'Float32'));.

Возвращаемое значение

  • 32-битное число с плавающей запятой при успешном разборе, в противном случае возвращается значение по умолчанию, если оно передано, или 0, если нет. Float32.

Пример

Запрос:

SELECT
    toFloat32OrDefault('8', CAST('0', 'Float32')),
    toFloat32OrDefault('abc', CAST('0', 'Float32'))
FORMAT Vertical;

Результат:

Строка 1:
──────
toFloat32OrDefault('8', CAST('0', 'Float32')):   8
toFloat32OrDefault('abc', CAST('0', 'Float32')): 0

См. также

toFloat64

Преобразует входное значение в значение типа Float64. В случае ошибки выбрасывает исключение.

Синтаксис

toFloat64(expr)

Аргументы

  • expr — выражение, возвращающее число или строковое представление числа. Выражение.

Поддерживаемые аргументы:

  • Значения целочисленных типов (U)Int8/16/32/64/128/256.
  • Строковые представления (U)Int8/16/32/128/256.
  • Значения типов с плавающей запятой Float32/64, включая NaN и Inf.
  • Строковые представления типов Float32/64, включая NaN и Inf (регистронезависимо).

Неподдерживаемые аргументы:

  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toFloat64('0xc0fe');.

Возвращаемое значение

  • 64-битное число с плавающей запятой. Float64.

Пример

Запрос:

SELECT
    toFloat64(42.7),
    toFloat64('42.7'),
    toFloat64('NaN')
FORMAT Vertical;

Результат:

Строка 1:
──────
toFloat64(42.7):   42.7
toFloat64('42.7'): 42.7
toFloat64('NaN'):  nan

См. также

toFloat64OrZero

Аналогично функции toFloat64, эта функция преобразует входное значение в значение типа Float64, но в случае ошибки возвращает 0.

Синтаксис

toFloat64OrZero(x)

Аргументы

  • x — строковое представление числа. String.

Поддерживаемые аргументы:

  • Строковые представления чисел типов (U)Int8/16/32/128/256, Float32/64.

Неподдерживаемые аргументы (возвращается 0):

  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toFloat64OrZero('0xc0fe');.

Возвращаемое значение

  • 64-битное значение типа Float при успешном выполнении, в противном случае — 0. Float64.

Пример

Запрос:

SELECT
    toFloat64OrZero('42.7'),
    toFloat64OrZero('abc')
FORMAT Vertical;

Результат:

Строка 1:
──────
toFloat64OrZero('42.7'): 42.7
toFloat64OrZero('abc'):  0

См. также

toFloat64OrNull

Подобно toFloat64, эта функция преобразует входное значение в значение типа Float64, но в случае ошибки возвращает NULL.

Синтаксис

toFloat64OrNull(x)

Аргументы

  • x — строковое представление числа. String.

Поддерживаемые аргументы:

  • Строковые представления типов (U)Int8/16/32/128/256, Float32/64.

Неподдерживаемые аргументы (возвращают \N):

  • Строковые представления значений в двоичном и шестнадцатеричном виде, например SELECT toFloat64OrNull('0xc0fe');.

Возвращаемое значение

  • 64-битное число с плавающей запятой при успешном преобразовании, в противном случае \N. Float64.

Пример

Запрос:

SELECT
    toFloat64OrNull('42.7'),
    toFloat64OrNull('abc')
FORMAT Vertical;

Результат:

Строка 1:
──────
toFloat64OrNull('42.7'): 42.7
toFloat64OrNull('abc'):  ᴺᵁᴸᴸ

См. также

toFloat64OrDefault

Как и функция toFloat64, эта функция преобразует входное значение в значение типа Float64, но в случае ошибки возвращает значение по умолчанию. Если аргумент default не указан, то в случае ошибки возвращается 0.

Синтаксис

toFloat64OrDefault(expr[, default])

Аргументы

  • expr — выражение, возвращающее число или строковое представление числа. Expression / String.
  • default (необязательный параметр) — значение по умолчанию, которое возвращается, если преобразование к типу Float64 не удалось. Float64.

Поддерживаемые аргументы:

  • Значения типа (U)Int8/16/32/64/128/256.
  • Строковые представления (U)Int8/16/32/128/256.
  • Значения типа Float32/64, включая NaN и Inf.
  • Строковые представления Float32/64, включая NaN и Inf (без учета регистра символов).

Аргументы, для которых возвращается значение по умолчанию:

  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toFloat64OrDefault('0xc0fe', CAST('0', 'Float64'));.

Возвращаемое значение

  • 64-битное значение типа Float64 при успешном преобразовании; в противном случае возвращается значение по умолчанию, если оно задано, или 0, если нет. Float64.

Пример

Запрос:

SELECT
    toFloat64OrDefault('8', CAST('0', 'Float64')),
    toFloat64OrDefault('abc', CAST('0', 'Float64'))
FORMAT Vertical;

Результат:

Строка 1:
──────
toFloat64OrDefault('8', CAST('0', 'Float64')):   8
toFloat64OrDefault('abc', CAST('0', 'Float64')): 0

См. также

toBFloat16

Преобразует входное значение в значение типа BFloat16. В случае ошибки выбрасывает исключение.

Синтаксис

toBFloat16(expr)

Аргументы

  • expr — выражение, возвращающее число или строковое представление числа. Выражение.

Поддерживаемые аргументы:

  • Значения типов (U)Int8/16/32/64/128/256.
  • Строковые представления (U)Int8/16/32/128/256.
  • Значения типов Float32/64, включая NaN и Inf.
  • Строковые представления Float32/64, включая NaN и Inf (без учета регистра).

Возвращаемое значение

  • 16-битное значение в формате brain-float. BFloat16.

Пример

SELECT toBFloat16(toFloat32(42.7))

42.5

SELECT toBFloat16(toFloat32('42.7'));

42.5

SELECT toBFloat16('42.7');

42.5

См. также

toBFloat16OrZero

Преобразует строковое входное значение в значение типа BFloat16. Если строка не представляет корректное число с плавающей запятой, функция возвращает ноль.

Синтаксис

toBFloat16OrZero(x)

Аргументы

  • x — строковое представление числа. String.

Поддерживаемые аргументы:

  • Строковые представления числовых значений.

Неподдерживаемые аргументы (возвращают 0):

  • Строковые представления двоичных и шестнадцатеричных чисел.
  • Числовые значения.

Возвращаемое значение

  • 16-битное значение в формате brain-float, иначе 0. BFloat16.
Примечание

Функция допускает незаметную потерю точности при преобразовании из строкового представления.

Пример

SELECT toBFloat16OrZero('0x5E'); -- неподдерживаемые аргументы

0

SELECT toBFloat16OrZero('12.3'); -- типичное использование

12.25

SELECT toBFloat16OrZero('12.3456789');

12.3125 -- неявная потеря точности

См. также

toBFloat16OrNull

Преобразует входное строковое значение в значение типа BFloat16, но если строка не представляет собой число с плавающей запятой, функция возвращает NULL.

Синтаксис

toBFloat16OrNull(x)

Аргументы

  • x — строковое представление числа. String.

Поддерживаемые аргументы:

  • Строковые представления числовых значений.

Неподдерживаемые аргументы (возвращают NULL):

  • Строковые представления двоичных и шестнадцатеричных значений.
  • Числовые значения.

Возвращаемое значение

  • 16-битное значение в формате brain-float, иначе NULL (\N). BFloat16.
Примечание

Функция допускает незаметную потерю точности при преобразовании из строкового представления.

Пример

SELECT toBFloat16OrNull('0x5E'); -- неподдерживаемые аргументы

\N

SELECT toBFloat16OrNull('12.3'); -- типичное использование

12.25

SELECT toBFloat16OrNull('12.3456789');

12.3125 -- неявная потеря точности

См. также

toDate

Приводит аргумент к типу данных Date.

Если аргумент имеет тип DateTime или DateTime64, функция усекает его и оставляет только компонент даты из DateTime:

SELECT
    now() AS x,
    toDate(x)
┌───────────────────x─┬─toDate(now())─┐
│ 2022-12-30 13:44:17 │    2022-12-30 │
└─────────────────────┴───────────────┘

Если аргумент имеет тип String, он интерпретируется как Date или DateTime. Если он был интерпретирован как DateTime, используется только компонент даты:

SELECT
    toDate('2022-12-30') AS x,
    toTypeName(x)
┌──────────x─┬─toTypeName(toDate('2022-12-30'))─┐
│ 2022-12-30 │ Date                             │
└────────────┴──────────────────────────────────┘

Получена 1 строка. Время выполнения: 0.001 сек.
SELECT
    toDate('2022-12-30 01:02:03') AS x,
    toTypeName(x)
┌──────────x─┬─toTypeName(toDate('2022-12-30 01:02:03'))─┐
│ 2022-12-30 │ Date                                      │
└────────────┴───────────────────────────────────────────┘

Если аргумент — число и выглядит как UNIX-метка времени (больше 65535), он интерпретируется как DateTime, затем усекается до Date в текущем часовом поясе. Часовой пояс можно задать вторым аргументом функции. Усечение до Date зависит от часового пояса:

SELECT
    now() AS current_time,
    toUnixTimestamp(current_time) AS ts,
    toDateTime(ts) AS time_Amsterdam,
    toDateTime(ts, 'Pacific/Apia') AS time_Samoa,
    toDate(time_Amsterdam) AS date_Amsterdam,
    toDate(time_Samoa) AS date_Samoa,
    toDate(ts) AS date_Amsterdam_2,
    toDate(ts, 'Pacific/Apia') AS date_Samoa_2
Строка 1:
──────
current_time:     2022-12-30 13:51:54
ts:               1672404714
time_Amsterdam:   2022-12-30 13:51:54
time_Samoa:       2022-12-31 01:51:54
date_Amsterdam:   2022-12-30
date_Samoa:       2022-12-31
date_Amsterdam_2: 2022-12-30
date_Samoa_2:     2022-12-31

Приведённый выше пример демонстрирует, как один и тот же UNIX‑таймстемп может интерпретироваться как разные даты в разных часовых поясах.

Если аргумент является числом и меньше 65536, он интерпретируется как количество дней, прошедших с 1970-01-01 (первого UNIX-дня), и преобразуется в Date. Это соответствует внутреннему числовому представлению типа данных Date. Пример:

SELECT toDate(12345)
┌─toDate(12345)─┐
│    2003-10-20 │
└───────────────┘

Это преобразование не зависит от часовых поясов.

Если аргумент выходит за диапазон типа Date, поведение определяется реализацией: значение может быть ограничено максимально поддерживаемой датой или переполниться:

SELECT toDate(10000000000.)
┌─toDate(10000000000.)─┐
│           2106-02-07 │
└──────────────────────┘

Функцию toDate можно также записать другими способами:

SELECT
    now() AS time,
    toDate(time),
    DATE(time),
    CAST(time, 'Date')
┌────────────────time─┬─toDate(now())─┬─DATE(now())─┬─CAST(now(), 'Date')─┐
│ 2022-12-30 13:54:58 │    2022-12-30 │  2022-12-30 │          2022-12-30 │
└─────────────────────┴───────────────┴─────────────┴─────────────────────┘

toDateOrZero

То же, что и toDate, но при получении некорректного аргумента возвращает нижнюю границу типа Date. Поддерживается только аргумент типа String.

Пример

Запрос:

SELECT toDateOrZero('2022-12-30'), toDateOrZero('');

Результат:

┌─toDateOrZero('2022-12-30')─┬─toDateOrZero('')─┐
│                 2022-12-30 │       1970-01-01 │
└────────────────────────────┴──────────────────┘

toDateOrNull

То же, что и toDate, но возвращает NULL, если передан некорректный аргумент. Поддерживается только аргумент типа String.

Пример

Запрос:

SELECT toDateOrNull('2022-12-30'), toDateOrNull('');

Результат:

┌─toDateOrNull('2022-12-30')─┬─toDateOrNull('')─┐
│                 2022-12-30 │             ᴺᵁᴸᴸ │
└────────────────────────────┴──────────────────┘

toDateOrDefault

Аналог функции toDate, но при неуспешном преобразовании возвращает значение по умолчанию — либо второй аргумент (если он указан), либо нижнюю границу типа Date.

Синтаксис

toDateOrDefault(expr [, default_value])

Пример

Запрос:

SELECT toDateOrDefault('2022-12-30'), toDateOrDefault('', '2023-01-01'::Date);

Результат:

┌─toDateOrDefault('2022-12-30')─┬─toDateOrDefault('', CAST('2023-01-01', 'Date'))─┐
│                    2022-12-30 │                                      2023-01-01 │
└───────────────────────────────┴─────────────────────────────────────────────────┘

toDateTime

Преобразует входное значение в значение типа DateTime.

Синтаксис

toDateTime(expr[, time_zone ])

Аргументы

Примечание

Если expr — число, оно интерпретируется как количество секунд с начала эпохи Unix (Unix timestamp). Если exprString, оно может быть интерпретировано как Unix timestamp или как строковое представление даты / даты и времени. По этой причине разбор строковых представлений коротких числовых значений (до 4 цифр включительно) явно отключён из‑за неоднозначности: например, строка '1999' может быть как годом (неполным строковым представлением Date / DateTime), так и Unix timestamp. Более длинные числовые строки разрешены.

Возвращаемое значение

Пример

Запрос:

SELECT toDateTime('2022-12-30 13:44:17'), toDateTime(1685457500, 'UTC');

Результат:

┌─toDateTime('2022-12-30 13:44:17')─┬─toDateTime(1685457500, 'UTC')─┐
│               2022-12-30 13:44:17 │           2023-05-30 14:38:20 │
└───────────────────────────────────┴───────────────────────────────┘

toDateTimeOrZero

То же, что и toDateTime, но возвращает нижнюю границу типа DateTime, если передан недопустимый аргумент. Поддерживается только аргумент типа String.

Пример

Запрос:

SELECT toDateTimeOrZero('2022-12-30 13:44:17'), toDateTimeOrZero('');

Результат:

┌─toDateTimeOrZero('2022-12-30 13:44:17')─┬─toDateTimeOrZero('')─┐
│                     2022-12-30 13:44:17 │  1970-01-01 00:00:00 │
└─────────────────────────────────────────┴──────────────────────┘

toDateTimeOrNull

Такая же функция, как toDateTime, но возвращает NULL, если передан некорректный аргумент. Поддерживается только аргумент типа String.

Пример

Запрос:

SELECT toDateTimeOrNull('2022-12-30 13:44:17'), toDateTimeOrNull('');

Результат:

┌─toDateTimeOrNull('2022-12-30 13:44:17')─┬─toDateTimeOrNull('')─┐
│                     2022-12-30 13:44:17 │                 ᴺᵁᴸᴸ │
└─────────────────────────────────────────┴──────────────────────┘

toDateTimeOrDefault

Аналогично toDateTime, но в случае неуспешного преобразования возвращает значение по умолчанию — либо третий аргумент (если он указан), либо нижнюю границу типа DateTime.

Синтаксис

toDateTimeOrDefault(expr [, time_zone [, default_value]])

Пример

Запрос:

SELECT toDateTimeOrDefault('2022-12-30 13:44:17'), toDateTimeOrDefault('', 'UTC', '2023-01-01'::DateTime('UTC'));

Результат:

┌─toDateTimeOrDefault('2022-12-30 13:44:17')─┬─toDateTimeOrDefault('', 'UTC', CAST('2023-01-01', 'DateTime(\'UTC\')'))─┐
│                        2022-12-30 13:44:17 │                                                     2023-01-01 00:00:00 │
└────────────────────────────────────────────┴─────────────────────────────────────────────────────────────────────────┘

toDate32

Преобразует аргумент в тип данных Date32. Если значение выходит за допустимый диапазон, toDate32 возвращает граничные значения, поддерживаемые Date32. Если аргумент имеет тип Date, учитываются его границы диапазона.

Синтаксис

toDate32(expr)

Аргументы

Возвращаемое значение

  • Календарная дата. Тип Date32.

Пример

  1. Значение входит в диапазон:
SELECT toDate32('1955-01-01') AS value, toTypeName(value);
┌──────value─┬─toTypeName(toDate32('1925-01-01'))─┐
│ 1955-01-01 │ Date32                             │
└────────────┴────────────────────────────────────┘
  1. Значение находится вне допустимого диапазона:
SELECT toDate32('1899-01-01') AS value, toTypeName(value);
┌──────value─┬─toTypeName(toDate32('1899-01-01'))─┐
│ 1900-01-01 │ Date32                             │
└────────────┴────────────────────────────────────┘
  1. С аргументом типа Date:
SELECT toDate32(toDate('1899-01-01')) AS value, toTypeName(value);
┌──────value─┬─toTypeName(toDate32(toDate('1899-01-01')))─┐
│ 1970-01-01 │ Date32                                     │
└────────────┴────────────────────────────────────────────┘

toDate32OrZero

То же, что и toDate32, но возвращает минимальное значение типа Date32, если передан некорректный аргумент.

Пример

Запрос:

SELECT toDate32OrZero('1899-01-01'), toDate32OrZero('');

Результат:

┌─toDate32OrZero('1899-01-01')─┬─toDate32OrZero('')─┐
│                   1900-01-01 │         1900-01-01 │
└──────────────────────────────┴────────────────────┘

toDate32OrNull

То же, что и toDate32, но возвращает NULL, если получен некорректный аргумент.

Пример

Запрос:

SELECT toDate32OrNull('1955-01-01'), toDate32OrNull('');

Результат:

┌─toDate32OrNull('1955-01-01')─┬─toDate32OrNull('')─┐
│                   1955-01-01 │               ᴺᵁᴸᴸ │
└──────────────────────────────┴────────────────────┘

toDate32OrDefault

Преобразует аргумент к типу данных Date32. Если значение выходит за допустимый диапазон, toDate32OrDefault возвращает нижнюю границу диапазона значений, поддерживаемого Date32. Если аргумент имеет тип Date, его границы также учитываются. Возвращает значение по умолчанию, если получен некорректный аргумент.

Пример

Запрос:

SELECT
    toDate32OrDefault('1930-01-01', toDate32('2020-01-01')),
    toDate32OrDefault('xx1930-01-01', toDate32('2020-01-01'));

Результат:

┌─toDate32OrDefault('1930-01-01', toDate32('2020-01-01'))─┬─toDate32OrDefault('xx1930-01-01', toDate32('2020-01-01'))─┐
│                                              1930-01-01 │                                                2020-01-01 │
└─────────────────────────────────────────────────────────┴───────────────────────────────────────────────────────────┘

toDateTime64

Преобразует входной аргумент в значение типа DateTime64.

Синтаксис

toDateTime64(expr, scale, [timezone])

Аргументы

  • expr — значение. String, UInt32, Float или DateTime.
  • scale — размер тика (точность): 10-precision секунды. Допустимый диапазон: [ 0 : 9 ].
  • timezone (необязательный параметр) — часовой пояс указанного объекта типа DateTime64.

Возвращаемое значение

  • Календарная дата и время суток с точностью до долей секунды. DateTime64.

Пример

  1. Значение лежит в диапазоне:
SELECT toDateTime64('1955-01-01 00:00:00.000', 3) AS value, toTypeName(value);
┌───────────────────value─┬─toTypeName(toDateTime64('1955-01-01 00:00:00.000', 3))─┐
│ 1955-01-01 00:00:00.000 │ DateTime64(3)                                          │
└─────────────────────────┴────────────────────────────────────────────────────────┘
  1. Как десятичное число с заданной точностью:
SELECT toDateTime64(1546300800.000, 3) AS value, toTypeName(value);
┌───────────────────value─┬─toTypeName(toDateTime64(1546300800., 3))─┐
│ 2019-01-01 00:00:00.000 │ DateTime64(3)                            │
└─────────────────────────┴──────────────────────────────────────────┘

Если десятичная точка отсутствует, значение по-прежнему интерпретируется как Unix timestamp в секундах:

SELECT toDateTime64(1546300800000, 3) AS value, toTypeName(value);
┌───────────────────value─┬─toTypeName(toDateTime64(1546300800000, 3))─┐
│ 2282-12-31 00:00:00.000 │ DateTime64(3)                              │
└─────────────────────────┴────────────────────────────────────────────┘
  1. С параметром timezone:
SELECT toDateTime64('2019-01-01 00:00:00', 3, 'Asia/Istanbul') AS value, toTypeName(value);
┌───────────────────value─┬─toTypeName(toDateTime64('2019-01-01 00:00:00', 3, 'Asia/Istanbul'))─┐
│ 2019-01-01 00:00:00.000 │ DateTime64(3, 'Asia/Istanbul')                                      │
└─────────────────────────┴─────────────────────────────────────────────────────────────────────┘

toDateTime64OrZero

Подобно функции toDateTime64, эта функция преобразует входное значение в значение типа DateTime64, но при некорректном аргументе возвращает минимальное значение DateTime64.

Синтаксис

toDateTime64OrZero(expr, scale, [timezone])

Аргументы

  • expr — значение. String, UInt32, Float или DateTime.
  • scale — размер тика (точность): 10-precision секунды. Допустимый диапазон: [ 0 : 9 ].
  • timezone (необязательный параметр) — часовой пояс указанного объекта DateTime64.

Возвращаемое значение

  • Календарная дата и время суток с точностью до долей секунды, иначе возвращается минимальное значение DateTime64: 1970-01-01 01:00:00.000. DateTime64.

Пример

Запрос:

SELECT toDateTime64OrZero('2008-10-12 00:00:00 00:30:30', 3) AS invalid_arg

Результат:

┌─────────────invalid_arg─┐
│ 1970-01-01 01:00:00.000 │
└─────────────────────────┘

См. также:

toDateTime64OrNull

Подобно функции toDateTime64, эта функция преобразует входное значение в значение типа DateTime64, но возвращает NULL, если передан некорректный аргумент.

Синтаксис

toDateTime64OrNull(expr, scale, [timezone])

Аргументы

  • expr — значение. String, UInt32, Float или DateTime.
  • scale — размер тика (точность): 10-precision секунды. Допустимый диапазон значений: [ 0 : 9 ].
  • timezone (необязательный параметр) — часовой пояс указанного объекта DateTime64.

Возвращаемое значение

  • Календарная дата и время суток с субсекундной точностью, в противном случае — NULL. DateTime64/NULL.

Пример

Запрос:

SELECT
    toDateTime64OrNull('1976-10-18 00:00:00.30', 3) AS valid_arg,
    toDateTime64OrNull('1976-10-18 00:00:00 30', 3) AS invalid_arg

Результат:

┌───────────────valid_arg─┬─invalid_arg─┐
│ 1976-10-18 00:00:00.300 │        ᴺᵁᴸᴸ │
└─────────────────────────┴─────────────┘

См. также

toDateTime64OrDefault

Как и toDateTime64, эта функция преобразует входное значение в значение типа DateTime64, но возвращает либо значение по умолчанию типа DateTime64, либо указанное значение по умолчанию, если передан некорректный аргумент.

Синтаксис

toDateTime64OrNull(expr, scale, [timezone, default])

Аргументы

  • expr — значение. String, UInt32, Float или DateTime.
  • scale — размер тика (точность): 10-precision секунд. Допустимый диапазон: [ 0 : 9 ].
  • timezone (необязательный) — часовой пояс указанного объекта DateTime64.
  • default (необязательный) — значение по умолчанию, возвращаемое при передаче некорректного аргумента. DateTime64.

Возвращаемое значение

  • Календарная дата и время суток с точностью до долей секунды, либо минимальное значение DateTime64, либо значение default, если оно указано. DateTime64.

Пример

Запрос:

SELECT
    toDateTime64OrDefault('1976-10-18 00:00:00 30', 3) AS invalid_arg,
    toDateTime64OrDefault('1976-10-18 00:00:00 30', 3, 'UTC', toDateTime64('2001-01-01 00:00:00.00',3)) AS invalid_arg_with_default

Результат:

┌─────────────invalid_arg─┬─invalid_arg_with_default─┐
│ 1970-01-01 01:00:00.000 │  2000-12-31 23:00:00.000 │
└─────────────────────────┴──────────────────────────┘

См. также

toDecimal32

Преобразует входное значение в значение типа Decimal(9, S) с масштабом S. В случае ошибки выбрасывает исключение.

Синтаксис

toDecimal32(expr, S)

Аргументы

  • expr — выражение, возвращающее число или строковое представление числа. Expression.
  • S — параметр масштаба от 0 до 9, задающий, сколько цифр может иметь дробная часть числа. UInt8.

Поддерживаемые аргументы:

  • Значения или строковые представления типов (U)Int8/16/32/64/128/256.
  • Значения или строковые представления типов Float32/64.

Неподдерживаемые аргументы:

  • Значения или строковые представления значений Float32/64 NaN и Inf (без учёта регистра).
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toDecimal32('0xc0fe', 1);.
Примечание

Может произойти переполнение, если значение expr выходит за границы типа Decimal32: ( -1 * 10^(9 - S), 1 * 10^(9 - S) ). Избыточные цифры в дробной части отбрасываются (без округления). Избыточные цифры в целой части приводят к исключению.

Примечание

При преобразованиях лишние цифры отбрасываются, и поведение может быть неожиданным при работе с входными значениями Float32/Float64, так как операции выполняются с использованием инструкций с плавающей запятой. Например, toDecimal32(1.15, 2) равно 1.14, потому что 1.15 * 100 в формате с плавающей запятой даёт 114.99. Вы можете использовать строковый аргумент, чтобы операции выполнялись над целочисленным типом: toDecimal32('1.15', 2) = 1.15

Возвращаемое значение

Пример

Запрос:

SELECT
    toDecimal32(2, 1) AS a, toTypeName(a) AS type_a,
    toDecimal32(4.2, 2) AS b, toTypeName(b) AS type_b,
    toDecimal32('4.2', 3) AS c, toTypeName(c) AS type_c
FORMAT Vertical;

Результат:

Строка 1:
─────────
a:      2
type_a: Decimal(9, 1)
b:      4.2
type_b: Decimal(9, 2)
c:      4.2
type_c: Decimal(9, 3)

См. также

toDecimal32OrZero

Как и toDecimal32, эта функция преобразует входное значение в значение типа Decimal(9, S), но в случае ошибки возвращает 0.

Синтаксис

toDecimal32OrZero(expr, S)

Аргументы

  • expr — строковое представление числа. String.
  • S — параметр масштаба от 0 до 9, определяющий количество знаков в дробной части числа. UInt8.

Поддерживаемые аргументы:

  • Строковые представления значений типов (U)Int8/16/32/64/128/256.
  • Строковые представления значений типов Float32/64.

Неподдерживаемые аргументы:

  • Строковые представления значений Float32/64 NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toDecimal32OrZero('0xc0fe', 1);.
Примечание

Переполнение может произойти, если значение expr выходит за допустимый диапазон значений типа Decimal32: ( -1 * 10^(9 - S), 1 * 10^(9 - S) ). Лишние цифры в дробной части отбрасываются (без округления). Лишние цифры в целой части приводят к ошибке.

Возвращаемое значение

  • Значение типа Decimal(9, S) в случае успешного выполнения, в противном случае — 0 с S знаками после запятой. Decimal32(S).

Пример

Запрос:

SELECT
    toDecimal32OrZero(toString(-1.111), 5) AS a,
    toTypeName(a),
    toDecimal32OrZero(toString('Inf'), 5) AS b,
    toTypeName(b)
FORMAT Vertical;

Результат:

Строка 1:
─────────
a:             -1.111
toTypeName(a): Decimal(9, 5)
b:             0
toTypeName(b): Decimal(9, 5)

См. также

toDecimal32OrNull

Как и toDecimal32, эта функция преобразует входное значение в значение типа Nullable(Decimal(9, S)), но в случае ошибки возвращает 0.

Синтаксис

toDecimal32OrNull(expr, S)

Аргументы

  • expr — строковое представление числа. String.
  • S — параметр масштаба от 0 до 9, определяющий, сколько цифр может иметь дробная часть числа. UInt8.

Поддерживаемые аргументы:

  • Строковые представления типов (U)Int8/16/32/64/128/256.
  • Строковые представления типов Float32/64.

Неподдерживаемые аргументы:

  • Строковые представления значений Float32/64 NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например, SELECT toDecimal32OrNull('0xc0fe', 1);.
Примечание

Переполнение может произойти, если значение expr выходит за пределы типа Decimal32: ( -1 * 10^(9 - S), 1 * 10^(9 - S) ). Лишние цифры в дробной части отбрасываются (не округляются). Лишние цифры в целой части приводят к ошибке.

Возвращаемое значение

  • Значение типа Nullable(Decimal(9, S)) при успешном выполнении, иначе значение NULL того же типа. Decimal32(S).

Примеры

Запрос:

SELECT
    toDecimal32OrNull(toString(-1.111), 5) AS a,
    toTypeName(a),
    toDecimal32OrNull(toString('Inf'), 5) AS b,
    toTypeName(b)
FORMAT Vertical;

Результат:

Row 1:
──────
a:             -1.111
toTypeName(a): Nullable(Decimal(9, 5))
b:             ᴺᵁᴸᴸ
toTypeName(b): Nullable(Decimal(9, 5))

См. также

toDecimal32OrDefault

Подобно toDecimal32, эта функция преобразует входное значение в значение типа Decimal(9, S), но в случае ошибки возвращает значение по умолчанию.

Синтаксис

toDecimal32OrDefault(expr, S[, default])

Аргументы

  • expr — строковое представление числа. String.
  • S — параметр масштаба от 0 до 9, задающий, сколько цифр может иметь дробная часть числа. UInt8.
  • default (необязательный) — значение по умолчанию, возвращаемое, если преобразование к типу Decimal32(S) завершилось неудачно. Decimal32(S).

Поддерживаемые аргументы:

  • Строковые представления значений типов (U)Int8/16/32/64/128/256.
  • Строковые представления значений типов Float32/64.

Неподдерживаемые аргументы:

  • Строковые представления значений Float32/64 NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например: SELECT toDecimal32OrDefault('0xc0fe', 1);.
Примечание

Переполнение может произойти, если значение expr выходит за границы типа Decimal32: ( -1 * 10^(9 - S), 1 * 10^(9 - S) ). Лишние цифры в дробной части отбрасываются (без округления). Избыточное количество цифр в целой части приведёт к ошибке.

Примечание

При преобразованиях лишние цифры отбрасываются, и поведение может быть неожиданным при работе с входными значениями Float32/Float64, так как операции выполняются с использованием инструкций с плавающей запятой. Например: toDecimal32OrDefault(1.15, 2) равно 1.14, потому что 1.15 * 100 в формате с плавающей запятой даёт 114.99. Можно использовать строковый аргумент, чтобы операции выполнялись над целочисленным типом: toDecimal32OrDefault('1.15', 2) = 1.15

Возвращаемое значение

  • Значение типа Decimal(9, S) при успешном преобразовании, иначе возвращается значение по умолчанию, если оно передано, или 0, если не передано. Decimal32(S).

Примеры

Запрос:

SELECT
    toDecimal32OrDefault(toString(0.0001), 5) AS a,
    toTypeName(a),
    toDecimal32OrDefault('Inf', 0, CAST('-1', 'Decimal32(0)')) AS b,
    toTypeName(b)
FORMAT Vertical;

Результат:

Row 1:
──────
a:             0.0001
toTypeName(a): Decimal(9, 5)
b:             -1
toTypeName(b): Decimal(9, 0)

См. также

toDecimal64

Преобразует входное значение в значение типа Decimal(18, S) с масштабом S. В случае ошибки выбрасывает исключение.

Синтаксис

toDecimal64(expr, S)

Аргументы

  • expr — выражение, возвращающее число или строковое представление числа. Выражение.
  • S — параметр масштаба от 0 до 18, определяющий, сколько цифр может иметь дробная часть числа. UInt8.

Поддерживаемые аргументы:

  • Значения или строковые представления типов (U)Int8/16/32/64/128/256.
  • Значения или строковые представления типов Float32/64.

Неподдерживаемые аргументы:

  • Значения или строковые представления значений Float32/64 NaN и Inf (без учета регистра).
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toDecimal64('0xc0fe', 1);.
Примечание

Может возникнуть переполнение, если значение expr выходит за границы Decimal64: ( -1 * 10^(18 - S), 1 * 10^(18 - S) ). Лишние цифры в дробной части отбрасываются (без округления). Лишние цифры в целой части приводят к исключению.

Примечание

При преобразованиях лишние цифры отбрасываются, и поведение может быть неожиданным при работе с входными значениями Float32/Float64, так как операции выполняются с использованием инструкций с плавающей запятой. Например: toDecimal64(1.15, 2) равно 1.14, потому что 1.15 * 100 в формате с плавающей запятой равно 114.99. Вы можете использовать входное значение типа String, чтобы операции использовали базовый целочисленный тип: toDecimal64('1.15', 2) = 1.15

Возвращаемое значение

Пример

Запрос:

SELECT
    toDecimal64(2, 1) AS a, toTypeName(a) AS type_a,
    toDecimal64(4.2, 2) AS b, toTypeName(b) AS type_b,
    toDecimal64('4.2', 3) AS c, toTypeName(c) AS type_c
FORMAT Vertical;

Результат:

Строка 1:
─────────
a:      2
type_a: Decimal(18, 1)
b:      4.2
type_b: Decimal(18, 2)
c:      4.2
type_c: Decimal(18, 3)

См. также

toDecimal64OrZero

Как и toDecimal64, эта функция преобразует входное значение в значение типа Decimal(18, S), но при ошибке возвращает 0.

Синтаксис

toDecimal64OrZero(expr, S)

Аргументы

  • expr — строковое представление числа. String.
  • S — параметр масштаба от 0 до 18, задающий, сколько цифр может иметь дробная часть числа. UInt8.

Поддерживаемые аргументы:

  • Строковые представления типов (U)Int8/16/32/64/128/256.
  • Строковые представления типов Float32/64.

Неподдерживаемые аргументы:

  • Строковые представления значений Float32/64 NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toDecimal64OrZero('0xc0fe', 1);.
Примечание

Переполнение возможно, если значение expr выходит за границы типа Decimal64: ( -1 * 10^(18 - S), 1 * 10^(18 - S) ). Лишние цифры в дробной части отбрасываются (не округляются). Лишние цифры в целой части приводят к ошибке.

Возвращаемое значение

  • Значение типа Decimal(18, S) в случае успешного выполнения, иначе — 0 с S знаками после запятой. Decimal64(S).

Пример

Запрос:

SELECT
    toDecimal64OrZero(toString(0.0001), 18) AS a,
    toTypeName(a),
    toDecimal64OrZero(toString('Inf'), 18) AS b,
    toTypeName(b)
FORMAT Vertical;

Результат:

Строка 1:
─────────
a:             0.0001
toTypeName(a): Decimal(18, 18)
b:             0
toTypeName(b): Decimal(18, 18)

См. также

toDecimal64OrNull

Как и функция toDecimal64, эта функция преобразует входное значение в значение типа Nullable(Decimal(18, S)), но в случае ошибки возвращает 0.

Синтаксис

toDecimal64OrNull(expr, S)

Аргументы

  • expr — строковое представление числа. String.
  • S — параметр масштаба от 0 до 18, определяющий, сколько цифр может иметь дробная часть числа. UInt8.

Поддерживаемые аргументы:

  • Строковые представления типов (U)Int8/16/32/64/128/256.
  • Строковые представления типов Float32/64.

Неподдерживаемые аргументы:

  • Строковые представления значений Float32/64 NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toDecimal64OrNull('0xc0fe', 1);.
Примечание

Может произойти переполнение, если значение expr выходит за допустимые пределы типа Decimal64: ( -1 * 10^(18 - S), 1 * 10^(18 - S) ). Избыточные цифры в дробной части отбрасываются (без округления). Избыточные цифры в целой части приводят к ошибке.

Возвращаемое значение

  • Значение типа Nullable(Decimal(18, S)) при успешном выполнении, в противном случае — значение NULL того же типа. Decimal64(S).

Примеры

Запрос:

SELECT
    toDecimal64OrNull(toString(0.0001), 18) AS a,
    toTypeName(a),
    toDecimal64OrNull(toString('Inf'), 18) AS b,
    toTypeName(b)
FORMAT Vertical;

Результат:

Row 1:
──────
a:             0.0001
toTypeName(a): Nullable(Decimal(18, 18))
b:             ᴺᵁᴸᴸ
toTypeName(b): Nullable(Decimal(18, 18))

См. также

toDecimal64OrDefault

Как и toDecimal64, эта функция преобразует входное значение в значение типа Decimal(18, S), но при ошибке возвращает значение по умолчанию.

Синтаксис

toDecimal64OrDefault(expr, S[, default])

Аргументы

  • expr — Строковое представление числа. String.
  • S — Параметр масштаба от 0 до 18, задающий, сколько цифр может иметь дробная часть числа. UInt8.
  • default (опционально) — Значение по умолчанию, которое возвращается, если преобразование к типу Decimal64(S) завершилось неуспешно. Decimal64(S).

Поддерживаемые аргументы:

  • Строковые представления типов (U)Int8/16/32/64/128/256.
  • Строковые представления типов Float32/64.

Неподдерживаемые аргументы:

  • Строковые представления значений Float32/64 NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например: SELECT toDecimal64OrDefault('0xc0fe', 1);.
Примечание

Переполнение может произойти, если значение expr выходит за пределы Decimal64: ( -1 * 10^(18 - S), 1 * 10^(18 - S) ). Лишние цифры в дробной части отбрасываются (не округляются). Лишние цифры в целой части приведут к ошибке.

Примечание

При преобразованиях лишние цифры отбрасываются, и поведение при работе с входными значениями Float32/Float64 может оказаться неожиданным, поскольку операции выполняются с использованием инструкций с плавающей запятой. Например: toDecimal64OrDefault(1.15, 2) равно 1.14, потому что 1.15 * 100 в формате с плавающей запятой равно 114.99. Вы можете использовать строковый аргумент, чтобы операции выполнялись с использованием целочисленного базового типа: toDecimal64OrDefault('1.15', 2) = 1.15

Возвращаемое значение

  • Значение типа Decimal(18, S) в случае успеха, в противном случае возвращается значение по умолчанию, если оно передано, или 0, если нет. Decimal64(S).

Примеры

Запрос:

SELECT
    toDecimal64OrDefault(toString(0.0001), 18) AS a,
    toTypeName(a),
    toDecimal64OrDefault('Inf', 0, CAST('-1', 'Decimal64(0)')) AS b,
    toTypeName(b)
FORMAT Vertical;

Результат:

Row 1:
──────
a:             0.0001
toTypeName(a): Decimal(18, 18)
b:             -1
toTypeName(b): Decimal(18, 0)

См. также

toDecimal128

Преобразует входное значение в значение типа Decimal(38, S) с масштабом S. В случае ошибки выбрасывает исключение.

Синтаксис

toDecimal128(expr, S)

Аргументы

  • expr — выражение, возвращающее число или строковое представление числа. Выражение.
  • S — параметр масштаба в диапазоне от 0 до 38, определяющий, сколько цифр может быть в дробной части числа. UInt8.

Поддерживаемые аргументы:

  • Значения или строковые представления значений типов (U)Int8/16/32/64/128/256.
  • Значения или строковые представления значений типов Float32/64.

Неподдерживаемые аргументы:

  • Значения или строковые представления значений Float32/64 NaN и Inf (без учета регистра).
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toDecimal128('0xc0fe', 1);.
Примечание

Может произойти переполнение, если значение expr выходит за пределы диапазона Decimal128: ( -1 * 10^(38 - S), 1 * 10^(38 - S) ). Лишние цифры в дробной части отбрасываются (не округляются). Лишние цифры в целой части приводят к исключению.

Примечание

При преобразованиях лишние цифры отбрасываются, и поведение может быть неожиданным при работе с входными данными Float32/Float64, так как операции выполняются с использованием инструкций с плавающей запятой. Например: toDecimal128(1.15, 2) равно 1.14, потому что 1.15 * 100 в формате с плавающей запятой равно 114.99. Вы можете использовать строковый аргумент, чтобы операции выполнялись над базовым целочисленным типом: toDecimal128('1.15', 2) = 1.15

Возвращаемое значение

Пример

Запрос:

SELECT
    toDecimal128(99, 1) AS a, toTypeName(a) AS type_a,
    toDecimal128(99.67, 2) AS b, toTypeName(b) AS type_b,
    toDecimal128('99.67', 3) AS c, toTypeName(c) AS type_c
FORMAT Vertical;

Результат:

Строка 1:
─────────
a:      99
type_a: Decimal(38, 1)
b:      99.67
type_b: Decimal(38, 2)
c:      99.67
type_c: Decimal(38, 3)

См. также

toDecimal128OrZero

Аналогично функции toDecimal128, эта функция преобразует входное значение в тип Decimal(38, S), но в случае ошибки возвращает 0.

Синтаксис

toDecimal128OrZero(expr, S)

Аргументы

  • expr — Строковое представление числа. String.
  • S — Параметр масштаба от 0 до 38, задающий, сколько цифр может иметь дробная часть числа. UInt8.

Поддерживаемые аргументы:

  • Строковые представления чисел типов (U)Int8/16/32/64/128/256.
  • Строковые представления чисел типов Float32/64.

Неподдерживаемые аргументы:

  • Строковые представления значений Float32/64 NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toDecimal128OrZero('0xc0fe', 1);.
Примечание

Может произойти переполнение, если значение expr выходит за пределы диапазона Decimal128: ( -1 * 10^(38 - S), 1 * 10^(38 - S) ). Лишние цифры в дробной части отбрасываются (не округляются). Избыточные цифры в целой части приведут к ошибке.

Возвращаемое значение

  • Значение типа Decimal(38, S) в случае успеха, иначе 0 с S знаками после запятой. Decimal128(S).

Пример

Запрос:

SELECT
    toDecimal128OrZero(toString(0.0001), 38) AS a,
    toTypeName(a),
    toDecimal128OrZero(toString('Inf'), 38) AS b,
    toTypeName(b)
FORMAT Vertical;

Результат:

Строка 1:
─────────
a:             0.0001
toTypeName(a): Decimal(38, 38)
b:             0
toTypeName(b): Decimal(38, 38)

См. также

toDecimal128OrNull

Аналогично функции toDecimal128, эта функция преобразует входное значение в значение типа Nullable(Decimal(38, S)), однако в случае ошибки возвращает 0.

Синтаксис

toDecimal128OrNull(expr, S)

Аргументы

  • expr — строковое представление числа. String.
  • S — параметр масштаба от 0 до 38, определяющий, сколько цифр может иметь дробная часть числа. UInt8.

Поддерживаемые аргументы:

  • Строковые представления типов (U)Int8/16/32/64/128/256.
  • Строковые представления типов Float32/64.

Неподдерживаемые аргументы:

  • Строковые представления значений Float32/64 NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toDecimal128OrNull('0xc0fe', 1);.
Примечание

Переполнение может произойти, если значение expr выходит за пределы диапазона Decimal128: ( -1 * 10^(38 - S), 1 * 10^(38 - S) ). Лишние цифры в дробной части отбрасываются (не округляются). Лишние цифры в целой части приведут к ошибке.

Возвращаемое значение

  • Значение типа Nullable(Decimal(38, S)) при успешном выполнении, иначе значение NULL того же типа. Decimal128(S).

Примеры

Запрос:

SELECT
    toDecimal128OrNull(toString(1/42), 38) AS a,
    toTypeName(a),
    toDecimal128OrNull(toString('Inf'), 38) AS b,
    toTypeName(b)
FORMAT Vertical;

Результат:

Row 1:
──────
a:             0.023809523809523808
toTypeName(a): Nullable(Decimal(38, 38))
b:             ᴺᵁᴸᴸ
toTypeName(b): Nullable(Decimal(38, 38))

Смотрите также

toDecimal128OrDefault

Как и функция toDecimal128, эта функция преобразует входное значение в тип Decimal(38, S), но в случае ошибки возвращает значение по умолчанию.

Синтаксис

toDecimal128OrDefault(expr, S[, default])

Аргументы

  • expr — Строковое представление числа. String.
  • S — Параметр масштаба в диапазоне от 0 до 38, определяющий, сколько цифр может иметь дробная часть числа. UInt8.
  • default (необязательный) — Значение по умолчанию, которое возвращается, если преобразование к типу Decimal128(S) не удалось. Decimal128(S).

Поддерживаемые аргументы:

  • Строковые представления значений типов (U)Int8/16/32/64/128/256.
  • Строковые представления значений типов Float32/64.

Неподдерживаемые аргументы:

  • Строковые представления значений Float32/64 NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toDecimal128OrDefault('0xc0fe', 1);.
Примечание

Может произойти переполнение, если значение expr выходит за пределы типа Decimal128: ( -1 * 10^(38 - S), 1 * 10^(38 - S) ). Лишние цифры в дробной части отбрасываются (не округляются). Избыточные цифры в целой части приведут к ошибке.

Примечание

При преобразованиях лишние цифры отбрасываются, и поведение может оказаться неожиданным при работе со входными значениями Float32/Float64, так как операции выполняются с использованием инструкций с плавающей запятой. Например: toDecimal128OrDefault(1.15, 2) будет равно 1.14, потому что 1.15 * 100 в представлении с плавающей запятой равно 114.99. Вы можете использовать строковый аргумент, чтобы операции выполнялись над базовым целочисленным типом: toDecimal128OrDefault('1.15', 2) = 1.15

Возвращаемое значение

  • Значение типа Decimal(38, S) при успешном выполнении, в противном случае — значение по умолчанию, если оно передано, или 0, если не передано. Decimal128(S).

Примеры

Запрос:

SELECT
    toDecimal128OrDefault(toString(1/42), 18) AS a,
    toTypeName(a),
    toDecimal128OrDefault('Inf', 0, CAST('-1', 'Decimal128(0)')) AS b,
    toTypeName(b)
FORMAT Vertical;

Результат:

Строка 1:
─────────
a:             0.023809523809523808
toTypeName(a): Decimal(38, 18)
b:             -1
toTypeName(b): Decimal(38, 0)

Смотрите также

toDecimal256

Преобразует входное значение в значение типа Decimal(76, S) с масштабом S. В случае ошибки выбрасывает исключение.

Синтаксис

toDecimal256(expr, S)

Аргументы

  • expr — выражение, возвращающее число или строковое представление числа. Expression.
  • S — параметр масштаба от 0 до 76, определяющий, сколько цифр может содержать дробная часть числа. UInt8.

Поддерживаемые аргументы:

  • Значения или строковые представления типов (U)Int8/16/32/64/128/256.
  • Значения или строковые представления типов Float32/64.

Неподдерживаемые аргументы:

  • Значения или строковые представления значений Float32/64 NaN и Inf (без учёта регистра).
  • Строковые представления двоичных и шестнадцатеричных значений, например: SELECT toDecimal256('0xc0fe', 1);.
Примечание

Может произойти переполнение, если значение expr выходит за границы Decimal256: ( -1 * 10^(76 - S), 1 * 10^(76 - S) ). Лишние цифры в дробной части отбрасываются (не округляются). Лишние цифры в целой части приводят к исключению.

Примечание

При преобразованиях лишние цифры отбрасываются, и поведение может оказаться неожиданным при работе со входными значениями Float32/Float64, так как операции выполняются с использованием инструкций с плавающей запятой. Например: toDecimal256(1.15, 2) равно 1.14, потому что 1.15 * 100 в представлении с плавающей запятой даёт 114.99. Вы можете использовать входное значение типа String, чтобы операции выполнялись над целочисленным типом: toDecimal256('1.15', 2) = 1.15

Возвращаемое значение

Пример

Запрос:

SELECT
    toDecimal256(99, 1) AS a, toTypeName(a) AS type_a,
    toDecimal256(99.67, 2) AS b, toTypeName(b) AS type_b,
    toDecimal256('99.67', 3) AS c, toTypeName(c) AS type_c
FORMAT Vertical;

Результат:

Строка 1:
─────────
a:      99
type_a: Decimal(76, 1)
b:      99.67
type_b: Decimal(76, 2)
c:      99.67
type_c: Decimal(76, 3)

См. также

toDecimal256OrZero

Аналогично toDecimal256, эта функция преобразует входное значение в значение типа Decimal(76, S), но в случае ошибки возвращает 0.

Синтаксис

toDecimal256OrZero(expr, S)

Аргументы

  • expr — строковое представление числа. String.
  • S — параметр масштаба от 0 до 76, определяющий, сколько цифр может содержать дробная часть числа. UInt8.

Поддерживаемые аргументы:

  • Строковые представления типов (U)Int8/16/32/64/128/256.
  • Строковые представления типов Float32/64.

Неподдерживаемые аргументы:

  • Строковые представления значений Float32/64 NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toDecimal256OrZero('0xc0fe', 1);.
Примечание

Переполнение может произойти, если значение expr выходит за границы Decimal256: ( -1 * 10^(76 - S), 1 * 10^(76 - S) ). Лишние цифры в дробной части отбрасываются (не округляются). Лишние цифры в целой части приведут к ошибке.

Возвращаемое значение

  • Значение типа Decimal(76, S) при успешном выполнении, иначе 0 с S знаками после запятой. Decimal256(S).

Пример

Запрос:

SELECT
    toDecimal256OrZero(toString(0.0001), 76) AS a,
    toTypeName(a),
    toDecimal256OrZero(toString('Inf'), 76) AS b,
    toTypeName(b)
FORMAT Vertical;

Результат:

Строка 1:
─────────
a:             0.0001
toTypeName(a): Decimal(76, 76)
b:             0
toTypeName(b): Decimal(76, 76)

См. также

toDecimal256OrNull

Как и toDecimal256, эта функция преобразует входное значение в значение типа Nullable(Decimal(76, S)), но при ошибке возвращает 0.

Синтаксис

toDecimal256OrNull(expr, S)

Аргументы

  • expr — строковое представление числа. String.
  • S — параметр масштаба от 0 до 76, определяющий, сколько цифр может быть в дробной части числа. UInt8.

Поддерживаемые аргументы:

  • Строковые представления типов (U)Int8/16/32/64/128/256.
  • Строковые представления типов Float32/64.

Неподдерживаемые аргументы:

  • Строковые представления значений Float32/64 NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toDecimal256OrNull('0xc0fe', 1);.
Примечание

Переполнение может произойти, если значение expr выходит за пределы Decimal256: ( -1 * 10^(76 - S), 1 * 10^(76 - S) ). Лишние цифры в дробной части отбрасываются (не округляются). Лишние цифры в целой части приведут к ошибке.

Возвращаемое значение

  • Значение типа Nullable(Decimal(76, S)) при успешном выполнении, иначе значение NULL того же типа. Decimal256(S).

Примеры

Запрос:

SELECT
    toDecimal256OrNull(toString(1/42), 76) AS a,
    toTypeName(a),
    toDecimal256OrNull(toString('Inf'), 76) AS b,
    toTypeName(b)
FORMAT Vertical;

Результат:

Row 1:
──────
a:             0.023809523809523808
toTypeName(a): Nullable(Decimal(76, 76))
b:             ᴺᵁᴸᴸ
toTypeName(b): Nullable(Decimal(76, 76))

См. также

toDecimal256OrDefault

Как и функция toDecimal256, эта функция преобразует входное значение в значение типа Decimal(76, S), но в случае ошибки возвращает значение по умолчанию.

Синтаксис

toDecimal256OrDefault(expr, S[, default])

Аргументы

  • expr — строковое представление числа. String.
  • S — параметр масштаба в диапазоне от 0 до 76, определяющий, сколько цифр может иметь дробная часть числа. UInt8.
  • default (необязательный) — значение по умолчанию, которое возвращается, если преобразование к типу Decimal256(S) выполнить не удалось. Decimal256(S).

Поддерживаемые аргументы:

  • Строковые представления типов (U)Int8/16/32/64/128/256.
  • Строковые представления типов Float32/64.

Неподдерживаемые аргументы:

  • Строковые представления значений Float32/64 NaN и Inf.
  • Строковые представления двоичных и шестнадцатеричных значений, например SELECT toDecimal256OrDefault('0xc0fe', 1);.
Примечание

Переполнение может произойти, если значение expr выходит за пределы диапазона Decimal256: ( -1 * 10^(76 - S), 1 * 10^(76 - S) ). Лишние цифры в дробной части отбрасываются (не округляются). Лишние цифры в целой части приведут к ошибке.

Примечание

При преобразованиях лишние цифры отбрасываются, и поведение может оказаться неожиданным при работе с входными значениями Float32/Float64, так как операции выполняются с использованием инструкций с плавающей запятой. Например: toDecimal256OrDefault(1.15, 2) равно 1.14, потому что 1.15 * 100 в формате с плавающей запятой равно 114.99. Вы можете использовать строковый аргумент, чтобы операции выполнялись над базовым целочисленным типом: toDecimal256OrDefault('1.15', 2) = 1.15

Возвращаемое значение

  • Значение типа Decimal(76, S) при успешном выполнении, иначе возвращается значение по умолчанию, если оно передано, или 0, если нет. Decimal256(S).

Примеры

Запрос:

SELECT
    toDecimal256OrDefault(toString(1/42), 76) AS a,
    toTypeName(a),
    toDecimal256OrDefault('Inf', 0, CAST('-1', 'Decimal256(0)')) AS b,
    toTypeName(b)
FORMAT Vertical;

Результат:

Строка 1:
─────────
a:             0.023809523809523808
toTypeName(a): Decimal(76, 76)
b:             -1
toTypeName(b): Decimal(76, 0)

См. также

toString

Преобразует значения в их строковое представление. Для аргументов типа DateTime функция может принимать второй аргумент типа String, содержащий имя часового пояса.

Синтаксис

toString(value[, timezone])

Аргументы

  • value: Значение, которое нужно преобразовать в строку. Any.
  • timezone: Необязательный параметр. Имя часового пояса для преобразования DateTime. String.

Возвращаемое значение

  • Возвращает строковое представление исходного значения. String.

Примеры

Пример использования

SELECT
    now() AS ts,
    time_zone,
    toString(ts, time_zone) AS str_tz_datetime
FROM system.time_zones
WHERE time_zone LIKE 'Europe%'
LIMIT 10;
┌──────────────────ts─┬─time_zone─────────┬─str_tz_datetime─────┐
│ 2023-09-08 19:14:59 │ Europe/Amsterdam  │ 2023-09-08 21:14:59 │
│ 2023-09-08 19:14:59 │ Europe/Andorra    │ 2023-09-08 21:14:59 │
│ 2023-09-08 19:14:59 │ Europe/Astrakhan  │ 2023-09-08 23:14:59 │
│ 2023-09-08 19:14:59 │ Europe/Athens     │ 2023-09-08 22:14:59 │
│ 2023-09-08 19:14:59 │ Europe/Belfast    │ 2023-09-08 20:14:59 │
└─────────────────────┴───────────────────┴─────────────────────┘

toFixedString

Преобразует аргумент типа String в тип FixedString(N) (строку фиксированной длины N). Если строка содержит меньше байт, чем N, она дополняется нулевыми байтами справа. Если строка содержит больше байт, чем N, генерируется исключение.

Синтаксис

toFixedString(s, N)

Аргументы

  • s — строка, которую нужно преобразовать в фиксированную строку. String.
  • N — длина. UInt8

Возвращаемое значение

  • Фиксированная строка длины N, полученная из s. FixedString.

Пример

Запрос:

SELECT toFixedString('foo', 8) AS s;

Результат:

┌─s─────────────┐
│ foo\0\0\0\0\0 │
└───────────────┘

toStringCutToZero

Принимает аргумент типа String или FixedString. Возвращает строку типа String, усечённую на первом найденном нулевом байте.

Синтаксис

toStringCutToZero(s)

Пример

Запрос:

SELECT toFixedString('foo', 8) AS s, toStringCutToZero(s) AS s_cut;

Результат:

┌─s─────────────┬─s_cut─┐
│ foo\0\0\0\0\0 │ foo   │
└───────────────┴───────┘

Запрос:

SELECT toFixedString('foo\0bar', 8) AS s, toStringCutToZero(s) AS s_cut;

Результат:

┌─s──────────┬─s_cut─┐
│ foo\0bar\0 │ foo   │
└────────────┴───────┘

toDecimalString

Преобразует числовое значение в значение типа String с количеством дробных знаков в результирующей строке, заданным пользователем.

Синтаксис

toDecimalString(number, scale)

Аргументы

  • number — значение типа Int, UInt, Float, Decimal, которое будет представлено в виде String,
  • scale — количество знаков после запятой, UInt8.
    • Максимальное значение scale для типов Decimal и Int, UInt — 77 (это максимально возможное количество значащих цифр для Decimal),
    • Максимальное значение scale для Float — 60.

Возвращаемое значение

  • Входное значение, представленное как String с заданным количеством знаков после запятой (scale). Число округляется вверх или вниз по обычным арифметическим правилам, если запрошенное значение scale меньше исходного scale числа.

Пример

Запрос:

SELECT toDecimalString(CAST('64.32', 'Float64'), 5);

Результат:

┌toDecimalString(CAST('64.32', 'Float64'), 5)─┐
│ 64.32000                                    │
└─────────────────────────────────────────────┘

reinterpretAsUInt8

Выполняет побайтовую переинтерпретацию, рассматривая входное значение как значение типа UInt8. В отличие от CAST, функция не пытается сохранить исходное значение — если целевой тип не может представить входное значение, результат не имеет смысла.

Синтаксис

reinterpretAsUInt8(x)

Параметры

Возвращаемое значение

  • Значение x, интерпретированное по байтам как UInt8. UInt8.

Пример

Запрос:

SELECT
    toInt8(257) AS x,
    toTypeName(x),
    reinterpretAsUInt8(x) AS res,
    toTypeName(res);

Результат:

┌─x─┬─toTypeName(x)─┬─res─┬─toTypeName(res)─┐
│ 1 │ Int8          │   1 │ UInt8           │
└───┴───────────────┴─────┴─────────────────┘

reinterpretAsUInt16

Выполняет байтовую переинтерпретацию, рассматривая входное значение как значение типа UInt16. В отличие от CAST, функция не пытается сохранить исходное значение — если целевой тип не может представить тип входного значения, результат не имеет осмысленного значения.

Синтаксис

reinterpretAsUInt16(x)

Параметры

Возвращаемое значение

  • Значение x, переинтерпретированное как UInt16. UInt16.

Пример

Запрос:

SELECT
    toUInt8(257) AS x,
    toTypeName(x),
    reinterpretAsUInt16(x) AS res,
    toTypeName(res);

Результат:

┌─x─┬─toTypeName(x)─┬─res─┬─toTypeName(res)─┐
│ 1 │ UInt8         │   1 │ UInt16          │
└───┴───────────────┴─────┴─────────────────┘

reinterpretAsUInt32

Выполняет переинтерпретацию байтов, рассматривая входное значение как значение типа UInt32. В отличие от CAST, функция не пытается сохранить исходное значение — если целевой тип не может представить значение входного типа, результат не имеет смысла.

Синтаксис

reinterpretAsUInt32(x)

Параметры

Возвращаемое значение

  • Значение x, побайтово переинтерпретированное как UInt32. UInt32.

Пример

Запрос:

SELECT
    toUInt16(257) AS x,
    toTypeName(x),
    reinterpretAsUInt32(x) AS res,
    toTypeName(res)

Результат:

┌───x─┬─toTypeName(x)─┬─res─┬─toTypeName(res)─┐
│ 257 │ UInt16        │ 257 │ UInt32          │
└─────┴───────────────┴─────┴─────────────────┘

reinterpretAsUInt64

Выполняет побайтовую переинтерпретацию, трактуя входное значение как значение типа UInt64. В отличие от CAST, функция не пытается сохранить исходное значение — если целевой тип не может представить входной тип, результат не имеет смысла.

Синтаксис

reinterpretAsUInt64(x)

Параметры

Возвращаемое значение

  • Значение x, побайтно интерпретированное как UInt64. UInt64.

Пример

Запрос:

SELECT
    toUInt32(257) AS x,
    toTypeName(x),
    reinterpretAsUInt64(x) AS res,
    toTypeName(res)

Результат:

┌───x─┬─toTypeName(x)─┬─res─┬─toTypeName(res)─┐
│ 257 │ UInt32        │ 257 │ UInt64          │
└─────┴───────────────┴─────┴─────────────────┘

reinterpretAsUInt128

Выполняет побайтовую переинтерпретацию, трактуя входное значение как значение типа UInt128. В отличие от CAST, функция не пытается сохранить исходное значение — если целевой тип не может представить тип входного значения, результат не имеет смысла.

Синтаксис

reinterpretAsUInt128(x)

Параметры

Возвращаемое значение

  • Значение x, побайтно переинтерпретированное как UInt128. UInt128.

Пример

Запрос:

SELECT
    toUInt64(257) AS x,
    toTypeName(x),
    reinterpretAsUInt128(x) AS res,
    toTypeName(res)

Результат:

┌───x─┬─toTypeName(x)─┬─res─┬─toTypeName(res)─┐
│ 257 │ UInt64        │ 257 │ UInt128         │
└─────┴───────────────┴─────┴─────────────────┘

reinterpretAsUInt256

Выполняет побайтовую переинтерпретацию, рассматривая входное значение как значение типа UInt256. В отличие от CAST, функция не пытается сохранить исходное значение — если целевой тип не может представить входное значение, результат не имеет смысла.

Синтаксис

reinterpretAsUInt256(x)

Параметры

Возвращаемое значение

  • Значение x, интерпретированное побайтно как UInt256. UInt256.

Пример

Запрос:

SELECT
    toUInt128(257) AS x,
    toTypeName(x),
    reinterpretAsUInt256(x) AS res,
    toTypeName(res)

Результат:

┌───x─┬─toTypeName(x)─┬─res─┬─toTypeName(res)─┐
│ 257 │ UInt128       │ 257 │ UInt256         │
└─────┴───────────────┴─────┴─────────────────┘

reinterpretAsInt8

Выполняет побайтовую переинтерпретацию, рассматривая входное значение как значение типа Int8. В отличие от CAST, функция не пытается сохранить исходное значение — если целевой тип не может представить значение входного типа, результат не имеет смысла.

Синтаксис

reinterpretAsInt8(x)

Параметры

Возвращаемое значение

  • Значение x, переинтерпретированное как Int8. Int8.

Пример

Запрос:

SELECT
    toUInt8(257) AS x,
    toTypeName(x),
    reinterpretAsInt8(x) AS res,
    toTypeName(res);

Результат:

┌─x─┬─toTypeName(x)─┬─res─┬─toTypeName(res)─┐
│ 1 │ UInt8         │   1 │ Int8            │
└───┴───────────────┴─────┴─────────────────┘

reinterpretAsInt16

Выполняет побайтовую переинтерпретацию, рассматривая входное значение как значение типа Int16. В отличие от CAST, функция не пытается сохранить исходное значение — если целевой тип не может представить тип входного значения, результат будет произвольным.

Синтаксис

reinterpretAsInt16(x)

Параметры

Возвращаемое значение

  • Значение x после побайтовой интерпретации как Int16. Int16.

Пример

Запрос:

SELECT
    toInt8(257) AS x,
    toTypeName(x),
    reinterpretAsInt16(x) AS res,
    toTypeName(res);

Результат:

┌─x─┬─toTypeName(x)─┬─res─┬─toTypeName(res)─┐
│ 1 │ Int8          │   1 │ Int16           │
└───┴───────────────┴─────┴─────────────────┘

reinterpretAsInt32

Выполняет побайтовую переинтерпретацию, рассматривая входное значение как значение типа Int32. В отличие от CAST, функция не пытается сохранить исходное значение — если целевой тип не может представить тип входного значения, результат становится бессмысленным.

Синтаксис

reinterpretAsInt32(x)

Параметры

Возвращаемое значение

  • Значение x, переинтерпретированное как Int32. Int32.

Пример

Запрос:

SELECT
    toInt16(257) AS x,
    toTypeName(x),
    reinterpretAsInt32(x) AS res,
    toTypeName(res);

Результат:

┌───x─┬─toTypeName(x)─┬─res─┬─toTypeName(res)─┐
│ 257 │ Int16         │ 257 │ Int32           │
└─────┴───────────────┴─────┴─────────────────┘

reinterpretAsInt64

Выполняет побайтовую переинтерпретацию, рассматривая входное значение как значение типа Int64. В отличие от CAST, функция не пытается сохранить исходное значение — если целевой тип не может представить входное значение, результат будет бессмысленным.

Синтаксис

reinterpretAsInt64(x)

Параметры

Возвращаемое значение

  • Значение x, байтово переинтерпретированное как Int64. Int64.

Пример

Запрос:

SELECT
    toInt32(257) AS x,
    toTypeName(x),
    reinterpretAsInt64(x) AS res,
    toTypeName(res);

Результат:

┌───x─┬─toTypeName(x)─┬─res─┬─toTypeName(res)─┐
│ 257 │ Int32         │ 257 │ Int64           │
└─────┴───────────────┴─────┴─────────────────┘

reinterpretAsInt128

Выполняет переинтерпретацию байтов, рассматривая входное значение как значение типа Int128. В отличие от CAST, функция не пытается сохранить исходное значение — если целевой тип не может представить значение исходного типа, результат не имеет смысла.

Синтаксис

reinterpretAsInt128(x)

Параметры

Возвращаемое значение

  • Значение x, побайтно переинтерпретированное как Int128. Int128.

Пример

Запрос:

SELECT
    toInt64(257) AS x,
    toTypeName(x),
    reinterpretAsInt128(x) AS res,
    toTypeName(res);

Результат:

┌───x─┬─toTypeName(x)─┬─res─┬─toTypeName(res)─┐
│ 257 │ Int64         │ 257 │ Int128          │
└─────┴───────────────┴─────┴─────────────────┘

reinterpretAsInt256

Выполняет побайтовую переинтерпретацию, рассматривая входное значение как значение типа Int256. В отличие от CAST, функция не пытается сохранить исходное значение — если целевой тип не может представить входное значение, полученное значение не имеет смысла.

Синтаксис

reinterpretAsInt256(x)

Параметры

Возвращаемое значение

  • Значение x, переинтерпретированное как Int256. Int256.

Пример

Запрос:

SELECT
    toInt128(257) AS x,
    toTypeName(x),
    reinterpretAsInt256(x) AS res,
    toTypeName(res);

Результат:

┌───x─┬─toTypeName(x)─┬─res─┬─toTypeName(res)─┐
│ 257 │ Int128        │ 257 │ Int256          │
└─────┴───────────────┴─────┴─────────────────┘

reinterpretAsFloat32

Выполняет побайтовую переинтерпретацию, рассматривая входное значение как значение типа Float32. В отличие от CAST, функция не пытается сохранить исходное значение — если целевой тип не может корректно представить исходное, результат не имеет смысла.

Синтаксис

reinterpretAsFloat32(x)

Параметры

Возвращаемое значение

  • Значение x, интерпретированное как Float32. Float32.

Пример

Запрос:

SELECT reinterpretAsUInt32(toFloat32(0.2)) AS x, reinterpretAsFloat32(x);

Результат:

┌──────────x─┬─reinterpretAsFloat32(x)─┐
│ 1045220557 │                     0.2 │
└────────────┴─────────────────────────┘

reinterpretAsFloat64

Выполняет побайтовую переинтерпретацию, рассматривая входное значение как значение типа Float64. В отличие от CAST, функция не пытается сохранить исходное значение — если целевой тип не может представить входной тип, результат будет некорректным.

Синтаксис

reinterpretAsFloat64(x)

Параметры

Возвращаемое значение

  • Значение x, интерпретированное как Float64. Float64.

Пример

Запрос:

SELECT reinterpretAsUInt64(toFloat64(0.2)) AS x, reinterpretAsFloat64(x);

Результат:

┌───────────────────x─┬─reinterpretAsFloat64(x)─┐
│ 4596373779694328218 │                     0.2 │
└─────────────────────┴─────────────────────────┘

reinterpretAsDate

Принимает значение типа String, FixedString или числовое значение и интерпретирует байты как число в порядке байтов хоста (little-endian). Возвращает дату, соответствующую количеству дней, прошедших с начала эпохи Unix.

Синтаксис

reinterpretAsDate(x)

Параметры

Возвращаемое значение

Детали реализации

Примечание

Если переданная строка слишком короткая, функция работает так, как будто строка дополнена необходимым количеством нулевых байтов. Если строка длиннее требуемой, лишние байты игнорируются.

Пример

Запрос:

SELECT reinterpretAsDate(65), reinterpretAsDate('A');

Результат:

┌─reinterpretAsDate(65)─┬─reinterpretAsDate('A')─┐
│            1970-03-07 │             1970-03-07 │
└───────────────────────┴────────────────────────┘

reinterpretAsDateTime

Эти функции принимают строку и интерпретируют байты, расположенные в начале строки, как число в порядке байтов хоста (little endian). Возвращают дату и время, интерпретируемые как количество секунд с начала эпохи Unix.

Синтаксис

reinterpretAsDateTime(x)

Параметры

Возвращаемое значение

Детали реализации

Примечание

Если переданная строка слишком короткая, функция работает так, как будто строка дополнена необходимым числом нулевых байтов. Если строка длиннее, чем нужно, лишние байты игнорируются.

Пример

Запрос:

SELECT reinterpretAsDateTime(65), reinterpretAsDateTime('A');

Результат:

┌─reinterpretAsDateTime(65)─┬─reinterpretAsDateTime('A')─┐
│       1970-01-01 01:01:05 │        1970-01-01 01:01:05 │
└───────────────────────────┴────────────────────────────┘

reinterpretAsString

Эта функция принимает число, дату или дату со временем и возвращает строку, содержащую байты, представляющие соответствующее значение в порядке байт хоста (little-endian). Нулевые байты удаляются с конца. Например, значение типа UInt32, равное 255, представляется строкой длиной один байт.

Синтаксис

reinterpretAsString(x)

Параметры

Возвращаемое значение

  • Строка, содержащая байтовое представление x. String.

Пример

Запрос:

SELECT
    reinterpretAsString(toDateTime('1970-01-01 01:01:05')),
    reinterpretAsString(toDate('1970-03-07'));

Результат:

┌─reinterpretAsString(toDateTime('1970-01-01 01:01:05'))─┬─reinterpretAsString(toDate('1970-03-07'))─┐
│ A                                                      │ A                                         │
└────────────────────────────────────────────────────────┴───────────────────────────────────────────┘

reinterpretAsFixedString

Эта функция принимает на вход число, дату или дату со временем и возвращает значение типа FixedString, содержащее байты, представляющие соответствующее значение в порядке байтов хоста (little-endian). Нулевые байты отбрасываются с конца. Например, значение типа UInt32, равное 255, — это FixedString длиной в один байт.

Синтаксис

reinterpretAsFixedString(x)

Параметры

Возвращаемое значение

  • Строка фиксированной длины, содержащая байты, представляющие x. FixedString.

Пример

Запрос:

SELECT
    reinterpretAsFixedString(toDateTime('1970-01-01 01:01:05')),
    reinterpretAsFixedString(toDate('1970-03-07'));

Результат:

┌─reinterpretAsFixedString(toDateTime('1970-01-01 01:01:05'))─┬─reinterpretAsFixedString(toDate('1970-03-07'))─┐
│ A                                                           │ A                                              │
└─────────────────────────────────────────────────────────────┴────────────────────────────────────────────────┘

reinterpretAsUUID

Примечание

Помимо перечисленных здесь функций для работы с UUID, существует отдельная документация по функциям UUID.

Принимает строку длиной 16 байт и возвращает UUID, интерпретируя каждую 8-байтовую половину в порядке байт little-endian. Если строка слишком короткая, функция работает так, как если бы строка была дополнена необходимым количеством нулевых байт в конце. Если строка длиннее 16 байт, лишние байты в конце игнорируются.

Синтаксис

reinterpretAsUUID(fixed_string)

Аргументы

  • fixed_string — байтовая строка в порядке байтов big-endian. FixedString.

Возвращаемое значение

  • Значение типа UUID. UUID.

Примеры

Преобразование строки в UUID.

Запрос:

SELECT reinterpretAsUUID(reverse(unhex('000102030405060708090a0b0c0d0e0f')));

Результат:

┌─reinterpretAsUUID(reverse(unhex('000102030405060708090a0b0c0d0e0f')))─┐
│                                  08090a0b-0c0d-0e0f-0001-020304050607 │
└───────────────────────────────────────────────────────────────────────┘

Преобразование строк в UUID и обратно.

Запрос:

WITH
    generateUUIDv4() AS uuid,
    identity(lower(hex(reverse(reinterpretAsString(uuid))))) AS str,
    reinterpretAsUUID(reverse(unhex(str))) AS uuid2
SELECT uuid = uuid2;

Результат:

┌─equals(uuid, uuid2)─┐
│                   1 │
└─────────────────────┘

reinterpret

Использует ту же последовательность байт в памяти для значения x и интерпретирует её как значение целевого типа.

Синтаксис

reinterpret(x, type)

Аргументы

  • x — Значение любого типа.
  • type — Целевой тип. Если это массив, то тип его элементов должен иметь фиксированную длину.

Возвращаемое значение

  • Значение целевого типа.

Примеры

Запрос:

SELECT reinterpret(toInt8(-1), 'UInt8') AS целое_в_беззнаковое,
    reinterpret(toInt8(1), 'Float32') AS целое_в_вещественное,
    reinterpret('1', 'UInt32') AS строка_в_целое;

Результат:

┌─int_to_uint─┬─int_to_float─┬─string_to_int─┐
│         255 │        1e-45 │            49 │
└─────────────┴──────────────┴───────────────┘

Запрос:

SELECT reinterpret(x'3108b4403108d4403108b4403108d440', 'Array(Float32)') AS string_to_array_of_Float32;

Результат:

┌─string_to_array_of_Float32─┐
│ [5.626,6.626,5.626,6.626]  │
└────────────────────────────┘

CAST

Преобразует входное значение к указанному типу данных. В отличие от функции reinterpret, CAST пытается представить то же значение, используя новый тип данных. Если преобразование невозможно, выбрасывается исключение. Поддерживается несколько вариантов синтаксиса.

Синтаксис

CAST(x, T)
CAST(x AS t)
x::t

Аргументы

  • x — Значение для преобразования. Может быть любого типа.
  • T — Имя целевого типа данных. String.
  • t — Целевой тип данных.

Возвращаемое значение

  • Преобразованное значение.
Примечание

Если входное значение не укладывается в диапазон целевого типа, происходит переполнение результата. Например, CAST(-1, 'UInt8') возвращает 255.

Примеры

Запрос:

SELECT
    CAST(toInt8(-1), 'UInt8') AS cast_int_to_uint,
    CAST(1.5 AS Decimal(3,2)) AS cast_float_to_decimal,
    '1'::Int32 AS cast_string_to_int;

Результат:

┌─cast_int_to_uint─┬─cast_float_to_decimal─┬─cast_string_to_int─┐
│              255 │                  1.50 │                  1 │
└──────────────────┴───────────────────────┴────────────────────┘

Запрос:

SELECT
    '2016-06-15 23:00:00' AS timestamp,
    CAST(timestamp AS DateTime) AS datetime,
    CAST(timestamp AS Date) AS date,
    CAST(timestamp, 'String') AS string,
    CAST(timestamp, 'FixedString(22)') AS fixed_string;

Результат:

┌─timestamp───────────┬────────────datetime─┬───────date─┬─string──────────────┬─fixed_string──────────────┐
│ 2016-06-15 23:00:00 │ 2016-06-15 23:00:00 │ 2016-06-15 │ 2016-06-15 23:00:00 │ 2016-06-15 23:00:00\0\0\0 │
└─────────────────────┴─────────────────────┴────────────┴─────────────────────┴───────────────────────────┘

Преобразование к типу FixedString (N) работает только для аргументов типа String или FixedString.

Поддерживается преобразование типа в Nullable и обратно.

Пример

Запрос:

SELECT toTypeName(x) FROM t_null;

Результат:

┌─toTypeName(x)─┐
│ Int8          │
│ Int8          │
└───────────────┘

Запрос:

SELECT toTypeName(CAST(x, 'Nullable(UInt16)')) FROM t_null;

Результат:

┌─toTypeName(CAST(x, 'Nullable(UInt16)'))─┐
│ Nullable(UInt16)                        │
│ Nullable(UInt16)                        │
└─────────────────────────────────────────┘

См. также

accurateCast(x, T)

Преобразует x к типу данных T.

Отличие от cast заключается в том, что accurateCast не допускает переполнения числовых типов при приведении, если значение x не укладывается в диапазон типа T. Например, accurateCast(-1, 'UInt8') вызывает исключение.

Пример

Запрос:

SELECT cast(-1, 'UInt8') AS uint8;

Результат:

┌─uint8─┐
│   255 │
└───────┘

Запрос:

SELECT accurateCast(-1, 'UInt8') AS uint8;

Результат:

Код: 70. DB::Exception: Получено от localhost:9000. DB::Exception: Значение в столбце Int8 невозможно безопасно преобразовать в тип UInt8: При обработке accurateCast(-1, 'UInt8') AS uint8.

accurateCastOrNull(x, T)

Преобразует входное значение x в указанный тип данных T. Всегда возвращает тип Nullable и значение NULL, если результат приведения не может быть представлен в целевом типе.

Синтаксис

accurateCastOrNull(x, T)

Аргументы

  • x — входное значение.
  • T — имя возвращаемого типа данных.

Возвращаемое значение

  • Значение, приведённое к указанному типу данных T.

Пример

Запрос:

SELECT toTypeName(accurateCastOrNull(5, 'UInt8'));

Результат:

┌─toTypeName(accurateCastOrNull(5, 'UInt8'))─┐
│ Nullable(UInt8)                            │
└────────────────────────────────────────────┘

Запрос:

SELECT
    accurateCastOrNull(-1, 'UInt8') AS uint8,
    accurateCastOrNull(128, 'Int8') AS int8,
    accurateCastOrNull('Test', 'FixedString(2)') AS fixed_string;

Результат:

┌─uint8─┬─int8─┬─fixed_string─┐
│  ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ         │
└───────┴──────┴──────────────┘

accurateCastOrDefault(x, T[, default_value])

Преобразует входное значение x в указанный тип данных T. Возвращает значение типа по умолчанию или default_value (если оно задано), если результат приведения не может быть представлен в целевом типе.

Синтаксис

accurateCastOrDefault(x, T)

Аргументы

  • x — входное значение.
  • T — имя возвращаемого типа данных.
  • default_value — значение по умолчанию для возвращаемого типа данных.

Возвращаемое значение

  • Значение, преобразованное к указанному типу данных T.

Пример

Запрос:

SELECT toTypeName(accurateCastOrDefault(5, 'UInt8'));

Результат:

┌─toTypeName(accurateCastOrDefault(5, 'UInt8'))─┐
│ UInt8                                         │
└───────────────────────────────────────────────┘

Запрос:

SELECT
    accurateCastOrDefault(-1, 'UInt8') AS uint8,
    accurateCastOrDefault(-1, 'UInt8', 5) AS uint8_default,
    accurateCastOrDefault(128, 'Int8') AS int8,
    accurateCastOrDefault(128, 'Int8', 5) AS int8_default,
    accurateCastOrDefault('Test', 'FixedString(2)') AS fixed_string,
    accurateCastOrDefault('Test', 'FixedString(2)', 'Te') AS fixed_string_default;

Результат:

┌─uint8─┬─uint8_default─┬─int8─┬─int8_default─┬─fixed_string─┬─fixed_string_default─┐
│     0 │             5 │    0 │            5 │              │ Te                   │
└───────┴───────────────┴──────┴──────────────┴──────────────┴──────────────────────┘

toInterval

Создаёт значение типа данных Interval из числового значения и единицы измерения интервала (например, 'second' или 'day').

Синтаксис

toInterval(значение, единица_измерения)

Аргументы

  • value — Длина интервала. Целые числа, их строковые представления или числа с плавающей запятой. (U)Int*/Float*/String.

  • unit — Тип создаваемого интервала. String Literal. Возможные значения:

    • nanosecond
    • microsecond
    • millisecond
    • second
    • minute
    • hour
    • day
    • week
    • month
    • quarter
    • year

    Аргумент unit нечувствителен к регистру.

Возвращаемое значение

  • Полученный интервал. Interval

Пример

SELECT toDateTime('2025-01-01 00:00:00') + toInterval(1, 'hour')
┌─toDateTime('2025-01-01 00:00:00') + toInterval(1, 'hour') ─┐
│                                        2025-01-01 01:00:00 │
└────────────────────────────────────────────────────────────┘

toIntervalYear

Возвращает интервал продолжительностью n лет типа данных IntervalYear.

Синтаксис

toIntervalYear(n)

Аргументы

  • n — количество лет. Целые числа, их строковые представления или числа с плавающей запятой. (U)Int*/Float*/String.

Возвращаемые значения

  • Интервал длительностью n лет. IntervalYear.

Пример

Запрос:

WITH
    toDate('2024-06-15') AS date,
    toIntervalYear(1) AS interval_to_year
SELECT date + interval_to_year AS result

Результат:

┌─────result─┐
│ 2025-06-15 │
└────────────┘

toIntervalQuarter

Возвращает интервал продолжительностью n кварталов типа данных IntervalQuarter.

Синтаксис

toIntervalQuarter(n)

Аргументы

  • n — количество кварталов. Целые числа или их строковые представления, а также числа с плавающей запятой. (U)Int*/Float*/String.

Возвращаемые значения

Пример

Запрос:

WITH
    toDate('2024-06-15') AS date,
    toIntervalQuarter(1) AS interval_to_quarter
SELECT date + interval_to_quarter AS result

Результат:

┌─────result─┐
│ 2024-09-15 │
└────────────┘

toIntervalMonth

Возвращает интервал длительностью n месяцев типа данных IntervalMonth.

Синтаксис

toIntervalMonth(n)

Аргументы

  • n — количество месяцев. Целые числа, их строковые представления, а также числа с плавающей запятой. (U)Int*/Float*/String.

Возвращаемые значения

  • Интервал длиной в n месяцев. IntervalMonth.

Пример

Запрос:

WITH
    toDate('2024-06-15') AS date,
    toIntervalMonth(1) AS interval_to_month
SELECT date + interval_to_month AS result

Результат:

┌─────result─┐
│ 2024-07-15 │
└────────────┘

toIntervalWeek

Возвращает интервал продолжительностью n недель типа данных IntervalWeek.

Синтаксис

toIntervalWeek(n)

Аргументы

  • n — количество недель. Целые числа, их строковые представления или числа с плавающей запятой. (U)Int*/Float*/String.

Возвращаемые значения

  • Интервал продолжительностью n недель. IntervalWeek.

Пример

Запрос:

WITH
    toDate('2024-06-15') AS date,
    toIntervalWeek(1) AS interval_to_week
SELECT date + interval_to_week AS result

Результат:

┌─────result─┐
│ 2024-06-22 │
└────────────┘

toIntervalDay

Возвращает интервал в n дней с типом данных IntervalDay.

Синтаксис

toIntervalDay(n)

Аргументы

  • n — количество дней. Целые числа, их строковые представления и числа с плавающей запятой. (U)Int*/Float*/String.

Возвращаемые значения

Пример

Запрос:

WITH
    toDate('2024-06-15') AS date,
    toIntervalDay(5) AS interval_to_days
SELECT date + interval_to_days AS result

Результат:

┌─────result─┐
│ 2024-06-20 │
└────────────┘

toIntervalHour

Возвращает интервал продолжительностью n часов типа данных IntervalHour.

Синтаксис

toIntervalHour(n)

Аргументы

  • n — количество часов. Целые числа или их строковые представления, а также числа с плавающей запятой. (U)Int*/Float*/String.

Возвращаемые значения

  • Интервал длительностью n часов. IntervalHour.

Пример

Запрос:

WITH
    toDate('2024-06-15') AS date,
    toIntervalHour(12) AS interval_to_hours
SELECT date + interval_to_hours AS result

Результат:

┌──────────────result─┐
│ 2024-06-15 12:00:00 │
└─────────────────────┘

toIntervalMinute

Возвращает интервал в n минут типа данных IntervalMinute.

Синтаксис

toIntervalMinute(n)

Аргументы

  • n — количество минут. Целые числа, их строковые представления и числа с плавающей запятой. (U)Int*/Float*/String.

Возвращаемые значения

Пример

Запрос:

WITH
    toDate('2024-06-15') AS date,
    toIntervalMinute(12) AS interval_to_minutes
SELECT date + interval_to_minutes AS result

Результат:

┌──────────────result─┐
│ 2024-06-15 00:12:00 │
└─────────────────────┘

toIntervalSecond

Возвращает интервал длительностью n секунд типа данных IntervalSecond.

Синтаксис

toIntervalSecond(n)

Аргументы

  • n — количество секунд. Целые числа, их строковые представления, а также числа с плавающей запятой. (U)Int*/Float*/String.

Возвращаемые значения

  • Интервал продолжительностью n секунд. IntervalSecond.

Пример

Запрос:

WITH
    toDate('2024-06-15') AS date,
    toIntervalSecond(30) AS interval_to_seconds
SELECT date + interval_to_seconds AS result

Результат:

┌──────────────result─┐
│ 2024-06-15 00:00:30 │
└─────────────────────┘

toIntervalMillisecond

Возвращает интервал продолжительностью n миллисекунд типа данных IntervalMillisecond.

Синтаксис

toIntervalMillisecond(n)

Аргументы

  • n — количество миллисекунд. Целые числа, их строковые представления и числа с плавающей точкой. (U)Int*/Float*/String.

Возвращаемые значения

Пример

Запрос:

WITH
    toDateTime('2024-06-15') AS date,
    toIntervalMillisecond(30) AS interval_to_milliseconds
SELECT date + interval_to_milliseconds AS result

Результат:

┌──────────────────result─┐
│ 2024-06-15 00:00:00.030 │
└─────────────────────────┘

toIntervalMicrosecond

Возвращает интервал длительностью n микросекунд типа данных IntervalMicrosecond.

Синтаксис

toIntervalMicrosecond(n)

Аргументы

  • n — количество микросекунд. Целые числа или их строковые представления, а также числа с плавающей запятой. (U)Int*/Float*/String.

Возвращаемые значения

Пример

Запрос:

WITH
    toDateTime('2024-06-15') AS date,
    toIntervalMicrosecond(30) AS interval_to_microseconds
SELECT date + interval_to_microseconds AS result

Результат:

┌─────────────────────result─┐
│ 2024-06-15 00:00:00.000030 │
└────────────────────────────┘

toIntervalNanosecond

Возвращает интервал в n наносекунд типа данных IntervalNanosecond.

Синтаксис

toIntervalNanosecond(n)

Аргументы

  • n — количество наносекунд. Целые числа, их строковые представления и числа с плавающей запятой. (U)Int*/Float*/String.

Возвращаемые значения

Пример

Запрос:

WITH
    toDateTime('2024-06-15') AS date,
    toIntervalNanosecond(30) AS interval_to_nanoseconds
SELECT date + interval_to_nanoseconds AS result

Результат:

┌────────────────────────result─┐
│ 2024-06-15 00:00:00.000000030 │
└───────────────────────────────┘

parseDateTime

Преобразует String в DateTime в соответствии со строкой формата MySQL.

Эта функция является обратной к функции formatDateTime.

Синтаксис

parseDateTime(str[, format[, timezone]])

Аргументы

  • str — Строка для парсинга.
  • format — Строка формата. Необязательный параметр. По умолчанию %Y-%m-%d %H:%i:%s, если параметр не задан.
  • timezoneЧасовой пояс. Необязательный параметр.

Возвращаемое значение(я)

Возвращает значение типа DateTime, полученное из входной строки в соответствии со строкой формата в стиле MySQL.

Поддерживаемые спецификаторы формата

Все спецификаторы формата, перечисленные в formatDateTime, за исключением:

  • %Q: Квартал (1–4)

Пример

SELECT parseDateTime('2021-01-04+23:00:00', '%Y-%m-%d+%H:%i:%s')

┌─parseDateTime('2021-01-04+23:00:00', '%Y-%m-%d+%H:%i:%s')─┐
│                                       2021-01-04 23:00:00 │
└───────────────────────────────────────────────────────────┘

Псевдоним: TO_TIMESTAMP.

parseDateTimeOrZero

Аналогично функции parseDateTime, за исключением того, что при встрече формата даты, который не может быть обработан, возвращает нулевую дату.

parseDateTimeOrNull

То же, что и parseDateTime, за исключением того, что при встрече неподдерживаемого формата даты функция возвращает NULL.

Псевдоним: str_to_date.

parseDateTimeInJodaSyntax

Аналогична функции parseDateTime, за исключением того, что строка формата задаётся в синтаксисе Joda, а не MySQL.

Эта функция выполняет операцию, противоположную функции formatDateTimeInJodaSyntax.

Синтаксис

parseDateTimeInJodaSyntax(str[, format[, timezone]])

Аргументы

  • str — Строка, которую нужно разобрать.
  • format — Строка формата. Необязательный параметр. По умолчанию используется yyyy-MM-dd HH:mm:ss.
  • timezoneЧасовой пояс. Необязательный параметр.

Возвращаемое значение

Возвращает значение DateTime, полученное разбором входной строки в соответствии со строкой формата в стиле Joda.

Поддерживаемые спецификаторы формата

Поддерживаются все спецификаторы формата, перечисленные в formatDateTimeInJodaSyntax, за исключением:

  • S: дробная часть секунды
  • z: часовой пояс
  • Z: смещение/идентификатор часового пояса

Пример

SELECT parseDateTimeInJodaSyntax('2023-02-24 14:53:31', 'yyyy-MM-dd HH:mm:ss', 'Europe/Minsk')

┌─parseDateTimeInJodaSyntax('2023-02-24 14:53:31', 'yyyy-MM-dd HH:mm:ss', 'Europe/Minsk')─┐
│                                                                     2023-02-24 14:53:31 │
└─────────────────────────────────────────────────────────────────────────────────────────┘

parseDateTimeInJodaSyntaxOrZero

То же, что и parseDateTimeInJodaSyntax, за исключением того, что при встрече с форматом даты, который не удаётся обработать, возвращает нулевую дату.

parseDateTimeInJodaSyntaxOrNull

Аналогично parseDateTimeInJodaSyntax, за исключением того, что при обнаружении неподдерживаемого формата даты возвращает NULL.

parseDateTime64

Преобразует String в тип DateTime64 в соответствии со строкой формата MySQL.

Синтаксис

parseDateTime64(str[, format[, timezone]])

Аргументы

  • str — Строка, которую нужно разобрать.
  • format — Строка формата. Необязательный параметр. По умолчанию — %Y-%m-%d %H:%i:%s.%f.
  • timezoneЧасовой пояс. Необязательный параметр.

Возвращаемое значение

Возвращает значение типа DateTime64, разобранное из входной строки в соответствии со строкой формата в стиле MySQL. Точность возвращаемого значения равна 6.

parseDateTime64OrZero

То же, что и parseDateTime64, но при обнаружении неподдерживаемого формата даты возвращает нулевую дату.

parseDateTime64OrNull

То же, что и parseDateTime64, но возвращает NULL, если встречает формат даты, который не может быть обработан.

parseDateTime64InJodaSyntax

Преобразует String в DateTime64 в соответствии с форматной строкой Joda.

Синтаксис

parseDateTime64InJodaSyntax(str[, format[, timezone]])

Аргументы

  • str — Строка, которую нужно разобрать.
  • format — Строка формата. Необязательный параметр. По умолчанию используется yyyy-MM-dd HH:mm:ss.
  • timezoneTimezone. Необязательный параметр.

Возвращаемое значение

Возвращает значение типа DateTime64, полученное разбором входной строки в соответствии со строкой формата в стиле Joda. Точность возвращаемого значения равна количеству символов S в строке формата (но не более 6).

parseDateTime64InJodaSyntaxOrZero

Работает так же, как parseDateTime64InJodaSyntax, за исключением того, что при обнаружении формата даты, который не может быть обработан, возвращает нулевую дату.

parseDateTime64InJodaSyntaxOrNull

То же, что и parseDateTime64InJodaSyntax, но возвращает NULL, если формат даты не может быть обработан.

parseDateTimeBestEffort

parseDateTime32BestEffort

Преобразует дату и время в строковом представлении типа String в тип данных DateTime.

Функция разбирает форматы ISO 8601, RFC 1123 - 5.2.14 RFC-822 Date and Time Specification, форматы ClickHouse и некоторые другие форматы даты и времени.

Синтаксис

parseDateTimeBestEffort(time_string [, time_zone])

Аргументы

  • time_string — строка, содержащая дату и время для преобразования. String.
  • time_zone — часовой пояс. Функция разбирает (парсит) time_string в соответствии с часовым поясом. String.

Поддерживаемые нестандартные форматы

  • Строка, содержащая 9..10-значный unix timestamp.
  • Строка с компонентами даты и времени: YYYYMMDDhhmmss, DD/MM/YYYY hh:mm:ss, DD-MM-YY hh:mm, YYYY-MM-DD hh:mm:ss и т. д.
  • Строка только с датой, без компонента времени: YYYY, YYYYMM, YYYY*MM, DD/MM/YYYY, DD-MM-YY и т. д.
  • Строка с днём и временем: DD, DD hh, DD hh:mm. В этом случае значение MM подставляется как 01.
  • Строка, включающая дату и время вместе с информацией о смещении часового пояса: YYYY-MM-DD hh:mm:ss ±h:mm и т. д. Например, 2020-12-12 17:36:00 -5:00.
  • syslog timestamp: Mmm dd hh:mm:ss. Например, Jun 9 14:20:32.

Для всех форматов с разделителями функция разбирает названия месяцев, указанные полностью или первыми тремя буквами названия месяца. Примеры: 24/DEC/18, 24-Dec-18, 01-September-2018. Если год не указан, считается, что он равен текущему году. Если получившееся значение типа DateTime оказывается в будущем (даже на секунду по сравнению с текущим моментом), то текущий год заменяется на предыдущий.

Возвращаемое значение

  • time_string, преобразованное к типу данных DateTime.

Примеры

Запрос:

SELECT parseDateTimeBestEffort('23/10/2020 12:12:57')
AS parseDateTimeBestEffort;

Результат:

┌─parseDateTimeBestEffort─┐
│     2020-10-23 12:12:57 │
└─────────────────────────┘

Запрос:

SELECT parseDateTimeBestEffort('Sat, 18 Aug 2018 07:22:16 GMT', 'Asia/Istanbul')
AS parseDateTimeBestEffort;

Результат:

┌─parseDateTimeBestEffort─┐
│     2018-08-18 10:22:16 │
└─────────────────────────┘

Запрос:

SELECT parseDateTimeBestEffort('1284101485')
AS parseDateTimeBestEffort;

Результат:

┌─parseDateTimeBestEffort─┐
│     2015-07-07 12:04:41 │
└─────────────────────────┘

Запрос:

SELECT parseDateTimeBestEffort('2018-10-23 10:12:12')
AS parseDateTimeBestEffort;

Результат:

┌─parseDateTimeBestEffort─┐
│     2018-10-23 10:12:12 │
└─────────────────────────┘

Запрос:

SELECT toYear(now()) AS year, parseDateTimeBestEffort('10 20:19');

Результат:

┌─year─┬─parseDateTimeBestEffort('10 20:19')─┐
│ 2023 │                 2023-01-10 20:19:00 │
└──────┴─────────────────────────────────────┘

Запрос:

WITH
    now() AS ts_now,
    formatDateTime(ts_around, '%b %e %T') AS syslog_arg
SELECT
    ts_now,
    syslog_arg,
    parseDateTimeBestEffort(syslog_arg)
FROM (SELECT arrayJoin([ts_now - 30, ts_now + 30]) AS ts_around);

Результат:

┌──────────────ts_now─┬─syslog_arg──────┬─parseDateTimeBestEffort(syslog_arg)─┐
│ 2023-06-30 23:59:30 │ Jun 30 23:59:00 │                 2023-06-30 23:59:00 │
│ 2023-06-30 23:59:30 │ Jul  1 00:00:00 │                 2022-07-01 00:00:00 │
└─────────────────────┴─────────────────┴─────────────────────────────────────┘

См. также

parseDateTimeBestEffortUS

Эта функция ведёт себя как parseDateTimeBestEffort для ISO-форматов даты, например YYYY-MM-DD hh:mm:ss, и других форматов даты, в которых компоненты месяца и дня могут быть однозначно извлечены, например YYYYMMDDhhmmss, YYYY-MM, DD hh или YYYY-MM-DD hh:mm:ss ±h:mm. Если компоненты месяца и дня не могут быть однозначно извлечены, например MM/DD/YYYY, MM-DD-YYYY или MM-DD-YY, по умолчанию используется американский формат даты вместо DD/MM/YYYY, DD-MM-YYYY или DD-MM-YY. В качестве исключения из последнего, если значение месяца больше 12 и не превышает 31, функция переходит к поведению parseDateTimeBestEffort, например 15/08/2020 интерпретируется как 2020-08-15.

parseDateTimeBestEffortOrNull

parseDateTime32BestEffortOrNull

Аналогично parseDateTimeBestEffort, за исключением того, что возвращает NULL, если встречает формат даты, который невозможно обработать.

parseDateTimeBestEffortOrZero

parseDateTime32BestEffortOrZero

То же, что и parseDateTimeBestEffort, за исключением того, что при встрече с форматом даты, который невозможно обработать, возвращается нулевая дата или нулевое значение даты-времени.

parseDateTimeBestEffortUSOrNull

То же, что и функция parseDateTimeBestEffortUS, за исключением того, что она возвращает NULL, если встречает формат даты, который нельзя обработать.

parseDateTimeBestEffortUSOrZero

То же, что и функция parseDateTimeBestEffortUS, за исключением того, что она возвращает нулевую дату (1970-01-01) или нулевую дату со временем (1970-01-01 00:00:00), если встречается формат даты, который не удаётся обработать.

parseDateTime64BestEffort

То же, что и функция parseDateTimeBestEffort, но дополнительно обрабатывает миллисекунды и микросекунды и возвращает тип данных DateTime.

Синтаксис

parseDateTime64BestEffort(time_string [, precision [, time_zone]])

Аргументы

  • time_string — Строка с датой или датой и временем для преобразования. String.
  • precision — Требуемая точность. 3 — для миллисекунд, 6 — для микросекунд. Значение по умолчанию — 3. Необязательный параметр. UInt8.
  • time_zoneTimezone. Функция парсит time_string в соответствии с этим часовым поясом. Необязательный параметр. String.

Возвращаемое значение

  • time_string, преобразованная к типу данных DateTime.

Примеры

Запрос:

SELECT parseDateTime64BestEffort('2021-01-01') AS a, toTypeName(a) AS t
UNION ALL
SELECT parseDateTime64BestEffort('2021-01-01 01:01:00.12346') AS a, toTypeName(a) AS t
UNION ALL
SELECT parseDateTime64BestEffort('2021-01-01 01:01:00.12346',6) AS a, toTypeName(a) AS t
UNION ALL
SELECT parseDateTime64BestEffort('2021-01-01 01:01:00.12346',3,'Asia/Istanbul') AS a, toTypeName(a) AS t
FORMAT PrettyCompactMonoBlock;

Результат:

┌──────────────────────────a─┬─t──────────────────────────────┐
│ 2021-01-01 01:01:00.123000 │ DateTime64(3)                  │
│ 2021-01-01 00:00:00.000000 │ DateTime64(3)                  │
│ 2021-01-01 01:01:00.123460 │ DateTime64(6)                  │
│ 2020-12-31 22:01:00.123000 │ DateTime64(3, 'Asia/Istanbul') │
└────────────────────────────┴────────────────────────────────┘

parseDateTime64BestEffortUS

Аналогична функции parseDateTime64BestEffort, за исключением того, что при неоднозначности она отдаёт предпочтение американскому формату даты (MM/DD/YYYY и т.д.).

parseDateTime64BestEffortOrNull

Работает так же, как parseDateTime64BestEffort, но возвращает NULL, если встречает формат даты, который не может быть обработан.

parseDateTime64BestEffortOrZero

То же, что и parseDateTime64BestEffort, за исключением того, что при встрече с форматом даты, который не удаётся обработать, возвращает нулевую дату или нулевое значение даты и времени.

parseDateTime64BestEffortUSOrNull

Аналогична функции parseDateTime64BestEffort, за исключением того, что при неоднозначности эта функция отдаёт предпочтение формату даты, принятому в США (MM/DD/YYYY и т. д.), и возвращает NULL, если встречает формат даты, который не может быть обработан.

parseDateTime64BestEffortUSOrZero

То же, что и parseDateTime64BestEffort, за исключением того, что при неоднозначной интерпретации эта функция предпочитает американский формат даты (MM/DD/YYYY и т. д.) и возвращает нулевую дату или нулевое значение дата-время, если встречает формат даты, который невозможно обработать.

toLowCardinality

Преобразует входной параметр в вариант типа данных LowCardinality на основе исходного типа.

Для преобразования данных из типа LowCardinality используйте функцию CAST. Например, CAST(x as String).

Синтаксис

toLowCardinality(expr)

Аргументы

Возвращаемые значения

Пример

Запрос:

SELECT toLowCardinality('1');

Результат:

┌─toLowCardinality('1')─┐
│ 1                     │
└───────────────────────┘

toUnixTimestamp

Преобразует String, Date или DateTime в Unix-метку времени (количество секунд с 1970-01-01 00:00:00 UTC) типа UInt32.

Синтаксис

toUnixTimestamp(date, [timezone])

Аргументы

  • date: Значение для преобразования. Date или Date32 или DateTime или DateTime64 или String.
  • timezone: Необязательный параметр. Часовой пояс, используемый для преобразования. Если не указан, используется часовой пояс сервера. String

Возвращаемое значение

Возвращает Unix‑временную метку. UInt32

Примеры

Пример использования

SELECT
'2017-11-05 08:07:47' AS dt_str,
toUnixTimestamp(dt_str) AS from_str,
toUnixTimestamp(dt_str, 'Asia/Tokyo') AS from_str_tokyo,
toUnixTimestamp(toDateTime(dt_str)) AS from_datetime,
toUnixTimestamp(toDateTime64(dt_str, 0)) AS from_datetime64,
toUnixTimestamp(toDate(dt_str)) AS from_date,
toUnixTimestamp(toDate32(dt_str)) AS from_date32
FORMAT Vertical;
Row 1:
──────
dt_str:          2017-11-05 08:07:47
from_str:        1509869267
from_str_tokyo:  1509836867
from_datetime:   1509869267
from_datetime64: 1509869267
from_date:       1509840000
from_date32:     1509840000

toUnixTimestamp64Second

Преобразует DateTime64 в значение типа Int64 с фиксированной точностью до секунды. Входное значение масштабируется вверх или вниз в зависимости от его точности.

Примечание

Результирующее значение — это метка времени в UTC, а не в часовом поясе, заданном в DateTime64.

Синтаксис

toUnixTimestamp64Second(value)

Аргументы

  • value — значение типа DateTime64 с любой точностью. DateTime64.

Возвращаемое значение

  • value, преобразованное к типу данных Int64. Int64.

Пример

Запрос:

WITH toDateTime64('2009-02-13 23:31:31.011', 3, 'UTC') AS dt64
SELECT toUnixTimestamp64Second(dt64);

Результат:

┌─toUnixTimestamp64Second(dt64)─┐
│                    1234567891 │
└───────────────────────────────┘

toUnixTimestamp64Milli

Преобразует DateTime64 в значение типа Int64 с фиксированной точностью до миллисекунд. Входное значение при необходимости увеличивается или уменьшается в зависимости от его исходной точности.

Примечание

Результирующее значение представляет собой метку времени в формате UTC, а не в часовом поясе DateTime64.

Синтаксис

toUnixTimestamp64Milli(value)

Аргументы

  • value — значение типа DateTime64 с любой точностью. DateTime64.

Возвращаемое значение

  • value, приведённое к типу данных Int64. Int64.

Пример

Запрос:

WITH toDateTime64('2009-02-13 23:31:31.011', 3, 'UTC') AS dt64
SELECT toUnixTimestamp64Milli(dt64);

Результат:

┌─toUnixTimestamp64Milli(dt64)─┐
│                1234567891011 │
└──────────────────────────────┘

toUnixTimestamp64Micro

Преобразует DateTime64 в значение типа Int64 с фиксированной микросекундной точностью. Входное значение соответствующим образом масштабируется (увеличивается или уменьшается) в зависимости от его точности.

Примечание

Результирующее значение представляет собой метку времени в UTC, а не в часовом поясе DateTime64.

Синтаксис

toUnixTimestamp64Micro(value)

Аргументы

  • value — значение типа DateTime64 с любой точностью. DateTime64.

Возвращаемое значение

  • value, преобразованное в тип данных Int64. Int64.

Пример

Запрос:

WITH toDateTime64('1970-01-15 06:56:07.891011', 6, 'UTC') AS dt64
SELECT toUnixTimestamp64Micro(dt64);

Результат:

┌─toUnixTimestamp64Micro(dt64)─┐
│                1234567891011 │
└──────────────────────────────┘

toUnixTimestamp64Nano

Преобразует DateTime64 в значение типа Int64 с фиксированной наносекундной точностью. Входное значение масштабируется вверх или вниз в зависимости от его точности.

Примечание

Результирующее значение является меткой времени в UTC, а не в часовом поясе DateTime64.

Синтаксис

toUnixTimestamp64Nano(value)

Аргументы

  • value — значение типа DateTime64 с любой точностью. DateTime64.

Возвращаемое значение

  • value, преобразованное к типу данных Int64. Int64.

Пример

Запрос:

WITH toDateTime64('1970-01-01 00:20:34.567891011', 9, 'UTC') AS dt64
SELECT toUnixTimestamp64Nano(dt64);

Результат:

┌─toUnixTimestamp64Nano(dt64)─┐
│               1234567891011 │
└─────────────────────────────┘

fromUnixTimestamp64Second

Преобразует значение типа Int64 в DateTime64 с фиксированной точностью до секунд и необязательным указанием часового пояса. Входное значение масштабируется (увеличивается или уменьшается) в зависимости от его точности.

Примечание

Обратите внимание, что входное значение интерпретируется как временная метка в UTC, а не как временная метка в заданном (или неявно заданном) часовом поясе.

Синтаксис

fromUnixTimestamp64Second(value[, timezone])

Аргументы

  • value — значение с любой точностью. Int64.
  • timezone — (необязательно) имя часового пояса для результата. String.

Возвращаемое значение

  • value, преобразованное в DateTime64 с точностью 0. DateTime64.

Пример

Запрос:

WITH CAST(1733935988, 'Int64') AS i64
SELECT
    fromUnixTimestamp64Second(i64, 'UTC') AS x,
    toTypeName(x);

Результат:

┌───────────────────x─┬─toTypeName(x)────────┐
│ 2024-12-11 16:53:08 │ DateTime64(0, 'UTC') │
└─────────────────────┴──────────────────────┘

fromUnixTimestamp64Milli

Преобразует значение типа Int64 в значение типа DateTime64 с фиксированной точностью до миллисекунд и необязательным указанием часового пояса. Входное значение соответствующим образом масштабируется вверх или вниз в зависимости от его точности.

Примечание

Обратите внимание, что входное значение интерпретируется как метка времени в UTC, а не как метка времени в заданном (или неявном) часовом поясе.

Синтаксис

fromUnixTimestamp64Milli(value[, timezone])

Аргументы

  • value — значение произвольной точности. Int64.
  • timezone — (необязательный) параметр, задающий имя часового пояса для результата. String.

Возвращаемое значение

  • value, преобразованное в DateTime64 с точностью 3. DateTime64.

Пример

Запрос:

WITH CAST(1733935988123, 'Int64') AS i64
SELECT
    fromUnixTimestamp64Milli(i64, 'UTC') AS x,
    toTypeName(x);

Результат:

┌───────────────────────x─┬─toTypeName(x)────────┐
│ 2024-12-11 16:53:08.123 │ DateTime64(3, 'UTC') │
└─────────────────────────┴──────────────────────┘

fromUnixTimestamp64Micro

Преобразует значение типа Int64 в DateTime64 с фиксированной микросекундной точностью и необязательным часовым поясом. Входное значение масштабируется в большую или меньшую сторону в зависимости от его точности.

Примечание

Обратите внимание, что входное значение интерпретируется как метка времени в UTC, а не как метка времени в заданном (или неявном) часовом поясе.

Синтаксис

fromUnixTimestamp64Micro(value[, timezone])

Аргументы

  • value — значение произвольной точности. Int64.
  • timezone — (необязательно) имя часового пояса результата. String.

Возвращаемое значение

  • value, преобразованное в DateTime64 с точностью 6. DateTime64.

Пример

Запрос:

WITH CAST(1733935988123456, 'Int64') AS i64
SELECT
    fromUnixTimestamp64Micro(i64, 'UTC') AS x,
    toTypeName(x);

Результат:

┌──────────────────────────x─┬─toTypeName(x)────────┐
│ 2024-12-11 16:53:08.123456 │ DateTime64(6, 'UTC') │
└────────────────────────────┴──────────────────────┘

fromUnixTimestamp64Nano

Преобразует значение типа Int64 в DateTime64 с фиксированной точностью до наносекунд и необязательным указанием часового пояса. Входное значение масштабируется (увеличивается или уменьшается) в зависимости от его исходной точности.

Примечание

Обратите внимание, что входное значение интерпретируется как метка времени в UTC, а не как метка времени в указанном (или неявном) часовом поясе.

Синтаксис

fromUnixTimestamp64Nano(value[, timezone])

Аргументы

  • value — значение с любой точностью. Int64.
  • timezone — (необязательное) имя часового пояса результата. String.

Возвращаемое значение

  • value, преобразованное в DateTime64 с точностью 9. DateTime64.

Пример

Запрос:

WITH CAST(1733935988123456789, 'Int64') AS i64
SELECT
    fromUnixTimestamp64Nano(i64, 'UTC') AS x,
    toTypeName(x);

Результат:

┌─────────────────────────────x─┬─toTypeName(x)────────┐
│ 2024-12-11 16:53:08.123456789 │ DateTime64(9, 'UTC') │
└───────────────────────────────┴──────────────────────┘

formatRow

Преобразует произвольные выражения в строку по указанному формату.

Синтаксис

formatRow(format, x, y, ...)

Аргументы

  • format — текстовый формат. Например, CSV, TabSeparated (TSV).
  • x, y, ... — выражения.

Возвращаемое значение

  • Отформатированная строка. (Для текстовых форматов она обычно заканчивается символом новой строки.)

Пример

Запрос:

SELECT formatRow('CSV', number, 'хорошо')
FROM numbers(3);

Результат:

┌─formatRow('CSV', number, 'good')─┐
│ 0,"good"
                         │
│ 1,"good"
                         │
│ 2,"good"
                         │
└──────────────────────────────────┘

Примечание: Если формат содержит суффикс или префикс, он будет записан в каждой строке.

Пример

Запрос:

SELECT formatRow('CustomSeparated', number, 'good')
FROM numbers(3)
SETTINGS format_custom_result_before_delimiter='<prefix>\n', format_custom_result_after_delimiter='<suffix>'

Результат:

┌─formatRow('CustomSeparated', number, 'good')─┐
│ <prefix>
0    good
<suffix>                   │
│ <prefix>
1    good
<suffix>                   │
│ <prefix>
2    good
<suffix>                   │
└──────────────────────────────────────────────┘

Примечание: в этой функции поддерживаются только строчно-ориентированные форматы.

formatRowNoNewline

Преобразует произвольные выражения в строку через заданный формат. Отличается от formatRow тем, что эта функция удаляет последний символ \n, если он есть.

Синтаксис

formatRowNoNewline(format, x, y, ...)

Аргументы

  • format — текстовый формат. Например, CSV, TabSeparated (TSV).
  • x, y, ... — выражения.

Возвращаемое значение

  • Отформатированная строка.

Пример

Запрос:

SELECT formatRowNoNewline('CSV', number, 'good')
FROM numbers(3);

Результат:

┌─formatRowNoNewline('CSV', number, 'good')─┐
│ 0,"good"                                  │
│ 1,"good"                                  │
│ 2,"good"                                  │
└───────────────────────────────────────────┘