MS SQL Преобразовать фактическое шестнадцатеричное значение в строку varchar, чтобы я мог преобразовать в INT и Varbinary - PullRequest
0 голосов
/ 17 июня 2020

У меня есть шестнадцатеричное значение, импортированное как varchar, например '0x400007'. Я хочу иметь возможность преобразовывать 0x40007 в другие типы данных для анализа.

select convert(varbinary(max),0x400007)

Возвращает 0x400007, однако строка

select convert(varbinary(max),'0x400007')

возвращает 0x3078343030303037. Как я могу заставить буквальную строку возвращать 0x40007? В конечном итоге моя цель - использовать

select convert(int,0x400007)

и дополнительно манипулировать значением int, 4194311 в этом примере, в других функциях. Это был век собак, так как мне приходилось мыслить шестнадцатеричным, так что любая помощь будет оценена.

Спасибо!

1 Ответ

0 голосов
/ 17 июня 2020

0x400007 и '0x400007' на самом деле не одно и то же значение. Когда вы просто конвертируете значение varchar, представляющее значение varbinary, оно будет преобразовано в его фактическое значение varbinary, которое (как вы выяснили) равно 0x3078343030303037. 30 - это 0, 78 - x, 34 - 4, 30 - 0 (обратите внимание, у вас их несколько) и, наконец, 37 это 7.

Вам необходимо использовать код стиля, чтобы SQL сервер знал, что varchar представляет varbinary, и он преобразует его так, как вы ожидаете:

SELECT CONVERT(varbinary(MAX), '0x400007', 1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...