int, bigint, smallint и tinyint (Transact-SQL)
Типы точных числовых данных, использующие целые значения.
Тип данных |
Диапазон |
Хранилище |
---|---|---|
bigint |
от -2^63 (-9 223 372 036 854 775 808) до 2^63-1 (9 223 372 036 854 775 807) |
8 байт |
int |
от –2^31 (–2 147 483 648) до 2^31-1 (2 147 483 647) |
4 байта |
smallint |
от -2^15 (-32 768) до 2^15-1 (32 767) |
2 байта |
tinyint |
от 0 до 255 |
1 байт |
Замечания
Тип данных int является основным типом целочисленных данных в SQL Server. Тип данных bigint используется для хранения значений, выходящих за диапазон, поддерживаемый типом данных int.
В таблице приоритетов типов данных тип bigint располагается между smallmoney и int.
Функции возвращают bigint только в случае, если выражение параметра имеет тип bigint. SQL Server не выполняет автоматического продвижения других целочисленных типов данных (tinyint, smallint и int) до bigint.
Внимание! |
---|
При использовании таких арифметических операторов, как +, -, *, / или %, для явного или неявного преобразования констант типа int, smallint, tinyint и bigint в значения типа float, real, decimal и numeric в SQL Server используются различные правила определения типов данных и точности результата, зависящие от наличия автоматической параметризации запроса. Поэтому одинаковые выражения в различных запросах могут иногда возвращать различные результаты. В случае отсутствия в запросе автоматической параметризации константа сначала преобразуется в значение типа numeric, точности которого хватает для ее хранения, а затем происходит преобразование в заданный тип данных. Например, константа 1 преобразуется в numeric (1, 0), а константа 250 — в numeric (3, 0). При наличии в запросе автоматической параметризации константа всегда сначала преобразуется в значение типа numeric (10, 0), а затем в данные конечного типа. При использовании оператора «/» могут различаться как точность, так и само значение результата. Например, результат автопараметризованного запроса, включающего в себя выражение SELECT CAST (1.0 / 7 AS float), отличается от аналогичного запроса без автоматической параметризации, так как результаты выполнения автопараметризированного запроса усекаются до значений, соответствующих типу данных numeric (10, 0). |
Преобразование целочисленных данных
При неявном преобразовании данных типа integer в данные типа character, если число слишком большое для символьного поля, SQL Server вставляет символ с кодом ASCII 42 — звездочку (*).
Целочисленные константы, превышающие 2 147 483 647, преобразуются в тип данных decimal, а не в bigint. Следующий пример демонстрирует изменение типа результата с int на decimal при превышении порогового значения.
SELECT 2147483647 / 2 AS Result1, 2147483649 / 2 AS Result2 ;
Ниже приводится результирующий набор.
Result1 Result2
1073741823 1073741824.500000
См. также
Справочник
Функции CAST и CONVERT (Transact-SQL)
Инструкция CREATE TABLE (Transact-SQL)
DECLARE @local\_variable (Transact-SQL)