Преобразование строки в HEX в SQL - PullRequest
11 голосов
/ 20 октября 2008

Я ищу способ преобразования подлинной строки в ее шестнадцатеричное значение в SQL. Я ищу что-то, что является дружественным к Informix, но я бы предпочел что-то нейтральное к базе данных

Вот выбор, который я использую сейчас:

SELECT SomeStringColumn from SomeTable

Вот выбор, который я хотел бы использовать: ВЫБЕРИТЕ hex (SomeStringColumn) из SomeTable

К сожалению, все не так просто ... Informix дает мне следующее сообщение: Ошибка преобразования символов в числовые

Есть идеи?

Ответы [ 4 ]

18 голосов
/ 20 октября 2008

Можете ли вы использовать Cast и fn_varbintohexstr?

SELECT master.dbo.fn_varbintohexstr(CAST(SomeStringColumn AS varbinary)) 
FROM SomeTable

Я не уверен, есть ли у вас эта функция в вашей системе баз данных, она есть в MS-SQL.

Я только что попробовал это в моей MMC SQL-сервера на одной из моих таблиц:

SELECT     master.dbo.fn_varbintohexstr(CAST(Addr1 AS VARBINARY)) AS Expr1
FROM         Customer

Это сработало, как и ожидалось. возможно, то, что я знаю как master.dbo.fn_varbintohexstr в MS-SQL, может быть похоже на функцию informix hex (), поэтому, возможно, попробуйте:

SELECT     hex(CAST(Addr1 AS VARBINARY)) AS Expr1
FROM         Customer
0 голосов
/ 04 мая 2017

СТАРЫЙ пост, но в моем случае мне также пришлось удалить часть гекса 0x, поэтому я использовал приведенный ниже код. (Я использую MS SQL)

convert(varchar, convert(Varbinary(MAX), YOURSTRING),2)

0 голосов
/ 19 января 2012

а как же:

declare @hexstring varchar(max);
set @hexstring = 'E0F0C0';
select cast('' as xml).value('xs:hexBinary( substring(sql:variable("@hexstring"), sql:column("t.pos")) )', 'varbinary(max)')
from (select case substring(@hexstring, 1, 2) when '0x' then 3 else 0 end) as t(pos)

Я видел это здесь: http://blogs.msdn.com/b/sqltips/archive/2008/07/02/converting-from-hex-string-to-varbinary-and-vice-versa.aspx

К сожалению, это работает только на> MS SQL 2005

0 голосов
/ 20 октября 2008

Если вы можете сделать это в клиенте базы данных в коде, это может быть проще.

В противном случае ошибка, вероятно, означает, что встроенная шестнадцатеричная функция не может работать с вашими значениями, как вы ожидаете. Я бы дважды проверил, что входное значение обрезается, и в первом формате это может быть так просто. Затем я бы сверился с документацией базы данных, описывающей шестнадцатеричную функцию, посмотрел, каков будет ее ожидаемый ввод, и сравнил бы это с некоторыми из ваших значений, а также выяснил, в чем разница и как изменить ваши значения, чтобы они соответствовали ожидаемому вводу. 1003 *

Простой поиск в Google по запросу "hex-функция informix" вывел первую страницу результатов с предложением: "Должно быть литеральным целым числом или каким-либо другим выражением, которое возвращает целое число". Если ваш тип данных - строка, сначала преобразуйте строку в целое число. На первый взгляд кажется, что вы что-то делаете с функцией приведения (я не уверен в этом).

select hex(cast SomeStringColumn as int)) from SomeTable
...