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?
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
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)
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
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