Преобразование строки в HEX в SQL

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

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

SELECT SomeStringColumn from SomeTable

Вот выбор, который я бы хотел использовать:   SELECT hex (SomeStringColumn) из SomeTable

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

Любая идея?

Ответ 1

Можете ли вы использовать 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

Ответ 2

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

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

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

select hex(cast SomeStringColumn as int)) from SomeTable

Ответ 3

как насчет:

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

Сорри, работающие только нa > MS SQL 2005

Ответ 4

OLD Post, но в моем случае мне также пришлось удалить 0x часть шестнадцатеричного кода, поэтому я использовал приведенный ниже код. (Я использую MS SQL)

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