web-dev-qa-db-fra.com

Conversion d'une chaîne en HEX dans SQL

Je cherche un moyen de transformer une chaîne authentique en sa valeur hexadécimale en SQL. Je cherche quelque chose qui soit compatible avec Informix mais je préférerais évidemment quelque chose de neutre à la base de données 

Voici la sélection que j'utilise maintenant:

SELECT SomeStringColumn from SomeTable

Voici la sélection que j'aimerais utiliser: SELECT hex (SomeStringColumn) de SomeTable

Malheureusement, rien n’est aussi simple que cela ... Informix me donne ce message: Erreur de conversion de caractère en numérique

Une idée?

11
Claude Houle

Pouvez-vous utiliser Cast et le fn_varbintohexstr?

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

Je ne sais pas si vous avez cette fonction dans votre système de base de données, c'est en MS-SQL.

Je viens de l'essayer sur mon serveur SQL MMC sur l'une de mes tables:

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

Cela a fonctionné comme prévu. peut-être que ce que je connais sous le nom de master.dbo.fn_varbintohexstr sur MS-SQL pourrait être similaire à la fonction informix hex (), alors essayez éventuellement:

SELECT     hex(CAST(Addr1 AS VARBINARY)) AS Expr1
FROM         Customer
18
stephenbayer

OLD Post mais dans mon cas je devais aussi enlever la partie 0x de l'hex alors j'ai utilisé le code ci-dessous. (J'utilise MS SQL)

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

0
gusmundo

qu'en est-il de:

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)

J'ai vu ceci ici: http://blogs.msdn.com/b/sqltips/archive/2008/07/02/converting-from-hex-string-to-varbinary-and-vice -versa.aspx

Sorrry, cela ne marche que sur> MS SQL 2005

0
Boklucius

Si cela vous est possible de le faire dans le code client du client de base de données, cela pourrait être plus facile.

Sinon, l'erreur signifie probablement que la fonction hexadécimale intégrée ne peut pas fonctionner avec vos valeurs comme prévu. Je voudrais vérifier que la valeur d’entrée est ajustée et que, dans le format d’abord, cela pourrait être aussi simple que cela. Ensuite, je consulterais la documentation de la base de données décrivant la fonction hexadécimale pour voir quelle serait son entrée attendue, la comparer à certaines de vos valeurs et découvrir la différence et comment changer vos valeurs pour correspondre à celle de l’entrée attendue.

Une simple recherche sur Google pour "informix hex function" a amené la première page de résultat avec la phrase: "Doit être un entier littéral ou une autre expression renvoyant un entier". Si votre type de données est une chaîne, commencez par la convertir en un entier. Il semble qu'à première vue, vous faites quelque chose avec la fonction de distribution (je ne suis pas sûr de cela).

select hex(cast SomeStringColumn as int)) from SomeTable
0
Josh