Этот ответ на тот же вопрос:
Преобразовать целое число в шестнадцатеричное и шестнадцатеричное целое
.. не работает для меня.
Я не могу перейти к строке HEX к целому числу, используя MS SQL server 2005 CAST или CONVERT. Я пропустил что-то тривиальное? Я искал экстенсивно, и лучшее, что я могу найти, - это длинные пользовательские функции, чтобы перейти от значения шестнадцатеричной строки к тому, что выглядит как десятичный int. Конечно, есть простой способ сделать это непосредственно в запросе, используя встроенные функции, а не писать пользовательскую функцию?
Спасибо
Изменить, чтобы включить примеры:
выберите CONVERT (INT, 0x89)
работает как ожидалось, но
выберите CONVERT (INT, '0x' + substring (msg, 66, 2)) из sometable
получает меня:
"Ошибка конверсии при преобразовании значения varchar '0x89' в тип данных int."
дополнительный явный CAST:
выберите 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.