MS SQL сервер - конвертировать строку HEX в целое число - PullRequest
19 голосов
/ 31 августа 2010

Это ответ на вопрос, похожий на тот же вопрос:

Преобразование целого числа в шестнадцатеричное и шестнадцатеричное в целое число

.. у меня не работает.

Я не могу перейти к шестнадцатеричной строке с целым числом, используя MS SQL Server 2005 CAST или CONVERT. Я что-то упускаю тривиально? Я много искал, и лучшее, что я могу найти, - это длинные пользовательские функции, которые переходят от значения шестнадцатеричной строки к чему-то, что выглядит как десятичное целое число. Конечно, есть простой способ сделать это непосредственно в запросе, используя встроенные функции вместо написания пользовательской функции?

Спасибо

Изменить, чтобы включить примеры:

выберите CONVERT (INT, 0x89)

работает как положено, но

выберите CONVERT (INT, '0x' + подстрока (msg, 66, 2)) из sometable

получает меня:

"Преобразование не удалось при преобразовании значения varchar '0x89' в тип данных int."

дополнительный явный CAST:

выберите CONVERT (INT, CAST ('0x89' КАК 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.

1 Ответ

32 голосов
/ 31 августа 2010

Спасибо за предоставленные примеры.Насколько я могу судить из документации и Google, это невозможно в MSSQL 2005 без UDF или другого процедурного кода.В MSSQL 2008 параметр style функции CONVERT () теперь поддерживает двоичные данные, поэтому вы можете сделать это напрямую следующим образом:

select convert(int, convert(varbinary, '0x89', 1))

В предыдущих версиях вы выбирали:

  • Использовать UDF (TSQL или CLR; CLR на самом деле может быть проще для этого)
  • Обернуть SELECT в хранимую процедуру (но вы, вероятно, все равно будете иметь эквивалент UDFв любом случае)
  • Преобразование его в интерфейс приложения
  • Обновление до MSSQL 2008

Если преобразование данных предназначено только для отображения, приложение может быть самым простымРешение: форматирование данных, как правило, там и есть.Если вы должны сделать это в запросе, тогда UDF является самым простым, но производительность может быть не очень высокой (я знаю, что вы сказали, что предпочитаете не использовать UDF, но не ясно, почему).Я предполагаю, что обновление до MSSQL 2008 только для этого, вероятно, нереально.

Наконец, к вашему сведению, номер версии, который вы включили, - это версия Management Studio, а не номер версии вашего сервера.Чтобы получить это, запросите сам сервер с select @@version или select serverproperty('ProductVersion').

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