Этот ответ на тот же вопрос:
Преобразовать целое число в шестнадцатеричное и шестнадцатеричное в целое
. . не работает для меня.
Я не могу перейти от HEX-строки к целому числу с помощью MS SQL Server 2005 CAST или CONVERT. Я упустил что-то тривиальное? Я много искал, и лучшее, что я могу найти, - это длинные пользовательские функции, позволяющие перейти от шестнадцатеричного строкового значения к чему-то, что выглядит как десятичное int. Конечно, есть простой способ сделать это непосредственно в запросе, используя встроенные функции, а не писать пользовательскую функцию?
Спасибо
Измените, чтобы включить примеры:
выберите CONVERT (INT, 0x89)
работает как и ожидалось, но
select CONVERT (INT, '0x' + substring (msg, 66, 2)) from sometable
получает меня:
«Ошибка преобразования при преобразовании значения varchar '0x89' в тип данных int. "
дополнительный явный CAST:
select CONVERT (INT, CAST ('0x89' AS VARBINARY))
выполняется, но возвращает 813185081.
Подстановка 'Int', 'Decimal' и т. д. для 'Varbinary' приводит к ошибке. В основном, Строки, которые кажутся числовыми, при необходимости интерпретируются как числовые, но не в этом случае, и, похоже, не существует CAST, распознающего HEX. Я хотел бы думать, что есть что-то простое и очевидное, но я просто пропустил это.
Microsoft SQL Server Management Studio Express 9.00.3042.00
Microsoft SQL Server 2005 - 9.00.3080.00 (Intel X86) 6 сентября 2009 г. 01 : 43: 32 Copyright (c) 1988-2005 Microsoft Corporation Express Edition с расширенными службами в Windows NT 5.1 (сборка 2600: пакет обновления 3)
Подводя итог: я хочу взять шестнадцатеричную строку, которая является значением в таблицу и отображать ее как часть результата запроса как десятичное целое число, используя только системные функции, а не UDF.