sql server 4 байта без знака int - PullRequest
       16

sql server 4 байта без знака int

7 голосов
/ 02 октября 2009

Кто-нибудь знает какую-либо работу, с помощью которой я могу сохранить целые числа без знака (от 0 до 4294967295), просто используя 4 байта вместо 8 байтов и bigint?

Я знаю, что мы можем создавать определяемые пользователем типы данных и создавать для них ограничение, чтобы не допускать отрицательных значений, но это все же не позволяет мне вводить значения свыше 2147483647. Я хочу использовать только 4 байта, но иметь возможность сохранять целые значения больше чем 2147483647, но меньше чем 4294967295.

Возможен дубликат: 4 байта без знака int в SQL Server?

Ответы [ 4 ]

3 голосов
/ 02 октября 2009

Нет доступного беззнакового типа, поэтому вы можете создать его с помощью UDT или выбрать больший тип данных. Если вы сделаете это в UDT, вы снова превысите 4 байта.

Чрезвычайным хаком было бы автоматическое применение смещения к сохраненному значению после его прочтения, добавление -2 ^ 31, но это реальный хакерский способ сделать это и сбить с толку любого, кто просматривает код и т. Д. упомянуть возможность ошибок / пропущенных вещей. Я бы вообще не рекомендовал этот хак.

2 голосов
/ 02 октября 2009

Используйте бинарный код (4). Если хотите, заверните его в UDT.

0 голосов
/ 17 марта 2015

Как упомянуто RBarry, попробуйте использовать это:

declare @bi binary(4) = cast(2147483648 as bigint)

declare @i int = cast(@bi as binary(4))

select @i  

declare @bi2 bigint = cast(cast(@i as binary(4)) as bigint)

select @bi2
0 голосов
/ 02 октября 2009

Это решение может немного сбить с толку, но подойдет для ваших целей. Хранение значений больше 2 ^ 31-1 в виде целых чисел вызывает переполнение и отображается как отрицательное число. Вы по-прежнему можете хранить свои значения в виде целых чисел и заново интерпретировать их в коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...