2015-12-11 3 views
0

У меня есть шестнадцатеричное число в строковой форме, например, 0x47423f34b640c3eb6e2a18a559322d68. Когда я пытаюсь преобразовать это в int, для сравнения с другим значением, которое является int, я сталкиваюсь с ограничением размера BIGINT. Я пробовал различные методы, такие как десятичные и т. Д., Но, похоже, не смог преодолеть ограничение на 64-битный размер.Как преобразовать шестнадцатеричное число в целое число в SQL, когда результирующее значение больше, чем bigint?

В идеале, я хотел бы преобразование, которое преобразуется из шестнадцатеричной строки в строку int, поэтому я могу обойти ограничения int. Однако выполнение этого без использования промежуточных преобразований (для значений, выходящих за пределы допустимого диапазона) вызывает некоторые проблемы.

Альтернативным решением было бы преобразование из десятичной строки (другое сравнительное значение, которое в приведенном примере, равно 94719161261466374640962917648041127272), в шестнадцатеричный или двоичный для сравнения. У меня уже есть подпрограмма, которая может преобразовывать произвольные длины шестнадцатеричных строк в двоичные, без переполнения промежуточных переменных, но мне не удавалось делать десятичные строки в двоичном формате без использования промежуточных переменных, поэтому я тоже не могу сравнивать их так.

У меня уже есть решение на основе aC# для этого преобразования, поэтому я мог бы использовать SQL CLR или другие подобные решения, но я бы предпочел собственный SQL-метод для этого преобразования (десятичная строка в шестнадцатеричную строку или двоичную строку, или шестнадцатеричную строку в десятичную строку или двоичную строку).

+1

Технически это должно быть возможно сделать в чистом T-SQL, но Я бы написал функцию CLR. –

ответ

0

Сервер SQL релиз 2008 обновлена ​​функция See CONVERT() here, чтобы иметь возможность преобразовать шестнадцатеричные значения:

select convert(bigint, convert (varbinary(8), '0x0000010d1858798c', 1)) 

Результат:

1155754654092 (decimal) (== 0x0000010d1858798c) 
+1

Это не то, что они задали –

+0

. Это простое преобразование, которое нужно делать другим людям. – Aman

+0

Спасибо за попытку ответа, но это использует BIGINT, и, как было сказано, мои входы больше, чем BIGINT. – WiredEarp

Смежные вопросы