Преобразование из целого числа в двоичное и обратно в SQL Server - PullRequest
5 голосов
/ 14 сентября 2011

Я все это утро бился головой об стену.

Следующий код SQL и его результат для меня не имеют смысла:

select CONVERT(INT, CONVERT(BINARY(30),2691485888))

, что приводитв:

-1060082528

Что?Почему результат не совпадает с моим исходным целым числом?

Вся моя цель - преобразовать целое число в байты и сохранить эти байты в базе данных, но без работы этого основного примера я застрял.Может кто-нибудь объяснить, что я делаю не так?

Кстати, я использую Sql Server 2005 (9.0.4340)

Ответы [ 3 ]

9 голосов
/ 14 сентября 2011

Как я отмечал в своем предыдущем комментарии, 2 691 485 888 больше, чем может удерживать INT.

Это будет работать:

select CONVERT(BIGINT, CONVERT(BINARY(30), CONVERT(BIGINT, 2691485888)))
4 голосов
/ 14 сентября 2011

Значение 2691485888 не может храниться в INT - оно слишком велико:

int -2 ^ 31 (-2,147,483,648) до 2 ^ 31-1 (2,147,483,647) 4 байта

Существует большая вероятность того, что вы увидите результат переполнения.

Тип данных, который может обрабатывать это значение, - BIGINT.

1 голос
/ 14 сентября 2011

2691485888 выходит за верхнюю границу целочисленного типа данных (2147483647)

Если вы конвертируете его в bigint, это должно привести к правильному количеству.

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