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

Приведение к типам 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

Из типов 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Переполнение

Другие типы​

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