Приведение к типам 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.
Примеры
| Bigint | int | Комментарий |
|---|---|---|
| 2147483647 | 2147483647 | |
| 2147483648 | Error | Переполнение |
| -2147483649 | Error | Переполнение |
Нестрогий режим
Начиная с версии 4.0, при переполнении возвращается NULL вместо неопределённого значения.
При переполнении возвращается NULL.
Если исходный тип допускает NULL, возвращается тип, допускающий NULL.
Если исходный тип не допускает NULL:
-
Если возможно переполнение (например,
cast bigint as int), возвращается тип, допускающий NULL; -
В остальных случаях возвращается тип, не допускающий NULL (например,
cast int as bigint).
Примеры
| Bigint | int | Комментарий |
|---|---|---|
| 2147483647 | 2147483647 | |
| 2147483648 | NULL | Переполнение |
| -2147483649 | NULL | Переполнение |
Из типа date
Если исходный тип допускает NULL, возвращается тип, допускающий NULL.
Если исходный тип не допускает NULL, возвращается тип, не допускающий NULL.
Описание правил
Начиная с версии 4.0, приведение date к tinyint и smallint больше не поддерживается.
-
Приведение к tinyint и smallint не поддерживается, поскольку неизбежно приводит к переполнению.
-
Поддерживается приведение к int, bigint и largeint. Для получения целого числа последовательно объединяются числовые значения года, месяца и дня даты. Месяц и день записываются двумя цифрами с ведущим 0, если значение меньше 10.
Примеры
| date | int |
|---|---|
| 2025-03-14 | 20250314 |
Из типа datetime
Если исходный тип допускает NULL, возвращается тип, допускающий NULL.
Если исходный тип не допускает NULL, возвращается тип, не допускающий NULL.
Описание правил
Начиная с версии 4.0, приведение datetime к tinyint, smallint и int больше не поддерживается.
-
Приведение к tinyint, smallint, int не поддерживается, поскольку неизбежно приводит к переполнению;
-
Поддерживается приведение к bigint, largeint. Микросекундная часть datetime отбрасывается, затем для получения целого числа последовательно объединяются значения года, месяца, дня, часа, минуты и секунды. Месяц, день, час, минута и секунда записываются двумя цифрами с ведущим 0, если значение меньше 10.
Примеры
| datetime | int |
|---|---|
| 2025-03-14 17:00:01.123456 | 20250314170001 |
| 9999-12-31 23:59:59.999999 | 99991231235959 |
Из типов float/double
Округление не поддерживается.
Строгий режим
Описание правил
Если исходный тип допускает NULL, возвращается тип, допускающий NULL.
Если исходный тип не допускает NULL, возвращается тип, не допускающий NULL.
-
При переполнении возвращается ошибка;
-
Для значений Infinity и NaN возвращается ошибка.
Примеры
| float/double | Приведение к int | Комментарий |
|---|---|---|
| 1.5 | 1 | Отбрасывание дробной части |
| 1.79769E308 | Error | Переполнение |
| Infinity | Error | |
| NaN | Error |
Нестрогий режим
Всегда возвращается тип, допускающий NULL.
Описание правил
Начиная с версии 4.0, при переполнении возвращается NULL вместо неопределённого значения.
-
При переполнении результат преобразования равен NULL;
-
Infinity преобразуется в NULL;
-
NaN преобразуется в NULL.
Примеры
| float/double | Приведение к int | Комментарий |
|---|---|---|
| 1.5 | 1 | Отбрасывание дробной части |
| 1.79769E308 | NULL | Переполнение |
| Infinity | NULL | |
| -Infinity | NULL | |
| NaN | NULL |
Из типа decimal
Округление не поддерживается.
Строгий режим
При переполнении возвращается ошибка.
Если исходный тип допускает NULL, возвращается тип, допускающий NULL.
Если исходный тип не допускает NULL, возвращается тип, не допускающий NULL.
Примеры
| Decimal(18, 6) | int | комментарий |
|---|---|---|
| 1.654321 | 1 | Отбрасывание дробной части |
| 12345678901.123 | Error | Переполнение |
Нестрогий режим
При переполнении результат преобразования равен NULL.
Если исходный тип допускает NULL, возвращается тип, допускающий NULL.
Если исходный тип не допускает NULL:
-
Если возможно переполнение (например,
cast decimal(18, 0) as int), возвращается тип, допускающий NULL; -
В остальных случаях возвращается тип, не допускающий NULL (например,
cast decimal(9, 0) as bigint).
Примеры
| Decimal(18, 6) | int | комментарий |
|---|---|---|
| 1.654321 | 1 | Отбрасывание дробной части |
| 12345678901.123 | NULL | Переполнение |
Из типа time
Преобразуется в микросекунды.
Строгий режим
При переполнении возвращается ошибка.
Если исходный тип допускает NULL, возвращается тип, допускающий NULL.
Если исходный тип не допускает NULL, возвращается тип, не допускающий NULL.
Примеры
| Time | int | Комментарий |
|---|---|---|
| 00:00:01 | 1000000 | |
| 838:59:58 | Error | Переполнение |
Нестрогий режим
Начиная с версии 4.0, при переполнении возвращается NULL вместо неопределённого значения.
При переполнении результат преобразования равен NULL.
Если исходный тип допускает NULL, возвращается тип, допускающий NULL.
Если исходный тип не допускает NULL:
-
Если возможно переполнение (например,
cast time as tinyint), возвращается тип, допускающий NULL; -
В остальных случаях возвращается тип, не допускающий NULL (например,
cast time as bigint).
Примеры
| Time | int | Комментарий |
|---|---|---|
| 00:00:01 | 1000000 | |
| 838:59:58 | NULL | Переполнение |
Другие типы
Не поддерживаются