Перейти к содержимому
Последнее обновление

Приведение к типам INT

Из string​

Строгий режим​

Если исходный тип допускает NULL, возвращается тип, допускающий NULL;

Если исходный тип не допускает NULL, возвращается тип, не допускающий NULL;

Определение в BNF​

<integer>       ::= <whitespace>* <sign>? <decimal_digit>+ <whitespace>*

<sign> ::= "+" | "-"

<decimal_digit> ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"

<whitespace> ::= " " | "\t" | "\n" | "\r" | "\f" | "\v"

Описание правил​

  • Поддерживаются только числа в десятичной системе счисления;

  • Перед числом может стоять знак плюса или минуса;

  • В начале и конце строк допускаются произвольные пробельные символы, включая: ' ', '\t', '\n', '\r', '\f', '\v';

  • Экспоненциальная запись не поддерживается;

  • Для других форматов возвращается ошибка;

  • При переполнении возвращается ошибка.

Примеры​

СтрокаРезультат приведения к intПримечание
"2147483647"2147483647
"-2147483648"-2147483648
" \t\r\n\f\v2147483647 \t\r\n\f\v"2147483647С пробельными символами в начале и конце
" \t\r\n\f\v+2147483647 \t\r\n\f\v"2147483647С пробельными символами в начале и конце, со знаком плюса
" \t\r\n\f\v-2147483648 \t\r\n\f\v"-2147483648С пробельными символами в начале и конце, со знаком минуса
'abc'ErrorНедопустимый формат
'123.456'ErrorДробная запись не поддерживается
'1.23456e5'ErrorЭкспоненциальная запись не поддерживается
'2147483648'ErrorПереполнение
'-2147483649'ErrorПереполнение

Нестрогий режим​

Всегда возвращается тип, допускающий NULL.

Определение в BNF​

<integer_non_strict> ::= <whitespace_char>* <sign>? <number> <whitespace_char>*

<sign> ::= "+" | "-"

<number> ::= <decimal_number> | <decimal_number> "." <decimal_number> | <decimal_number> "." | "." <decimal_number>

<decimal_number> ::= <decimal_digit>+

<decimal_digit> ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"

<whitespace_char> ::= " " | "\t" | "\n" | "\r" | "\f" | "\v"

Описание правил​

  • Поддерживаются все допустимые форматы строгого режима;

  • Поддерживается формат строгого режима с добавленной дробной частью; при преобразовании дробная часть отбрасывается;

  • Строки в экспоненциальной записи преобразуются в NULL;

  • Все остальные форматы преобразуются в NULL;

  • При переполнении значение преобразуется в NULL.

Примеры​

СтрокаРезультат приведения к intПримечание
"2147483647"2147483647
"-2147483648"-2147483648
" \t\r\n\f\v2147483647 \t\r\n\f\v"2147483647С пробельными символами в начале и конце
" \t\r\n\f\v+2147483647 \t\r\n\f\v"2147483647С пробельными символами в начале и конце, со знаком плюса
" \t\r\n\f\v-2147483648 \t\r\n\f\v"-2147483648С пробельными символами в начале и конце, со знаком минуса
'123.456'123
'1.23456e5'NULLЭкспоненциальная запись
'abc'NULLНедопустимый формат
'2147483648'NULLПереполнение
'-2147483649'NULLПереполнение

Из bool​

true преобразуется в 1, false преобразуется в 0.

Если исходный тип допускает NULL, возвращается тип, допускающий NULL.

Если исходный тип не допускает NULL, возвращается тип, не допускающий NULL.

Из целочисленного типа в целочисленный тип​

Поддерживается преобразование между любыми целочисленными типами.

Строгий режим​

При переполнении возвращается ошибка.

Если исходный тип допускает NULL, возвращается тип, допускающий NULL.

Если исходный тип не допускает NULL, возвращается тип, не допускающий NULL.

Примеры​

BigintintПримечание
21474836472147483647
2147483648ErrorПереполнение
-2147483649ErrorПереполнение

Нестрогий режим​

Изменение поведения

Начиная с версии 4.0 при переполнении возвращается NULL вместо неопределённого значения.

При переполнении возвращается NULL.

Если исходный тип допускает NULL, возвращается тип, допускающий NULL.

Если исходный тип не допускает NULL:

  • Если возможно переполнение (например, cast bigint as int), возвращается тип, допускающий NULL;

  • В остальных случаях возвращается тип, не допускающий NULL (например, cast int as bigint).

Примеры​

BigintintПримечание
21474836472147483647
2147483648NULLПереполнение
-2147483649NULLПереполнение

Из date​

Если исходный тип допускает NULL, возвращается тип, допускающий NULL.

Если исходный тип не допускает NULL, возвращается тип, не допускающий NULL.

Описание правил​

Изменение поведения

Начиная с версии 4.0 приведение date к tinyint и smallint больше не поддерживается.

  • Приведение к tinyint и smallint не поддерживается, поскольку оно неизбежно приводит к переполнению.

  • Поддерживается приведение к int, bigint и largeint. Числовые значения года, месяца и дня даты последовательно объединяются в целое число. Месяц и день записываются двумя цифрами и дополняются ведущим 0, если их значение меньше 10.

Примеры​

dateint
2025-03-1420250314

Из datetime​

Если исходный тип допускает NULL, возвращается тип, допускающий NULL.

Если исходный тип не допускает NULL, возвращается тип, не допускающий NULL.

Описание правил​

Изменение поведения

Начиная с версии 4.0 приведение datetime к tinyint, smallint и int больше не поддерживается.

  • Приведение к tinyint, smallint, int не поддерживается, поскольку оно неизбежно приводит к переполнению;

  • Поддерживается приведение к bigint, largeint. Микросекундная часть datetime отбрасывается, затем значения года, месяца, дня, часа, минуты и секунды последовательно объединяются в целое число. Месяц, день, час, минута и секунда записываются двумя цифрами и дополняются ведущим 0, если их значение меньше 10.

Примеры​

datetimeint
2025-03-14 17:00:01.12345620250314170001
9999-12-31 23:59:59.99999999991231235959

Из TIMESTAMP_NS​

Если исходный тип допускает NULL, возвращается тип, допускающий NULL.

Если исходный тип не допускает NULL, возвращается тип, не допускающий NULL.

Описание правил​

  • Приведение к tinyint, smallint или int не поддерживается, поскольку оно неизбежно приводит к переполнению.

  • Поддерживается приведение к bigint и largeint. Наносекундная часть TIMESTAMP_NS отбрасывается, затем значения года, месяца, дня, часа, минуты и секунды последовательно объединяются в целое число. Месяц, день, час, минута и секунда записываются двумя цифрами и дополняются ведущим 0, если их значение меньше 10.

Примеры​

Входное значение TIMESTAMP_NSЦелевой типРезультат
1677-09-21 00:12:43.145224192BIGINT16770921001243
1969-12-31 23:59:59.999999999BIGINT19691231235959
2024-02-29 12:34:56.123456789LARGEINT20240229123456
2262-04-11 23:47:16.854775807LARGEINT22620411234716

Из float/double​

Округление не поддерживается.

Строгий режим​

Описание правил​

Если исходный тип допускает NULL, возвращается тип, допускающий NULL.

Если исходный тип не допускает NULL, возвращается тип, не допускающий NULL.

  • При переполнении возвращается ошибка;

  • Для значений Infinity и NaN возвращается ошибка.

Примеры​

float/doubleПриведение к intПримечание
1.51Отбрасывание дробной части
1.79769E308ErrorПереполнение
InfinityError
NaNError

Нестрогий режим​

Всегда возвращается тип, допускающий NULL.

Описание правил​

Изменение поведения

Начиная с версии 4.0 при переполнении возвращается NULL вместо неопределённого значения.

  • При переполнении значение преобразуется в NULL;

  • Infinity преобразуется в NULL;

  • NaN преобразуется в NULL.

Примеры​

float/doubleПриведение к intПримечание
1.51Отбрасывание дробной части
1.79769E308NULLПереполнение
InfinityNULL
-InfinityNULL
NaNNULL

Из decimal​

Округление не поддерживается.

Строгий режим​

При переполнении возвращается ошибка.

Если исходный тип допускает NULL, возвращается тип, допускающий NULL.

Если исходный тип не допускает NULL, возвращается тип, не допускающий NULL.

Примеры​

Decimal(18, 6)intПримечание
1.6543211Отбрасывание дробной части
12345678901.123ErrorПереполнение

Нестрогий режим​

При переполнении значение преобразуется в NULL.

Если исходный тип допускает NULL, возвращается тип, допускающий NULL.

Если исходный тип не допускает NULL:

  • Если возможно переполнение (например, cast decimal(18, 0) as int), возвращается тип, допускающий NULL;

  • В остальных случаях возвращается тип, не допускающий NULL (например, cast decimal(9, 0) as bigint).

Примеры​

Decimal(18, 6)intПримечание
1.6543211Отбрасывание дробной части
12345678901.123NULLПереполнение

Из time​

Преобразуется в количество микросекунд.

Строгий режим​

При переполнении возвращается ошибка.

Если исходный тип допускает NULL, возвращается тип, допускающий NULL.

Если исходный тип не допускает NULL, возвращается тип, не допускающий NULL.

Примеры​

TimeintПримечание
00:00:011000000
838:59:58ErrorПереполнение

Нестрогий режим​

Изменение поведения

Начиная с версии 4.0 при переполнении возвращается NULL вместо неопределённого значения.

При переполнении значение преобразуется в NULL.

Если исходный тип допускает NULL, возвращается тип, допускающий NULL.

Если исходный тип не допускает NULL:

  • Если возможно переполнение (например, cast time as tinyint), возвращается тип, допускающий NULL;

  • В остальных случаях возвращается тип, не допускающий NULL (например, cast time as bigint).

Примеры​

TimeintПримечание
00:00:011000000
838:59:58NULLПереполнение

Другие типы​

Не поддерживаются