2008-10-20 10 views
11

Je cherche un moyen de transformer une chaîne authentique en sa valeur hexadécimale dans SQL. Je cherche quelque chose qui est Informix convivial mais je préfère évidemment la sélection Je suis maintenant en utilisant la base de données neutreConversion d'une chaîne en HEX dans SQL

quelque chose est ici:

SELECT SomeStringColumn from SomeTable 

Voici la sélection Je voudrais utiliser: hex SELECT (SomeStringColumn) de SomeTable

Malheureusement rien est aussi simple que cela ... Informix me donne ce message: caractère à une erreur de conversion numérique

Une idée? Pouvez-vous utiliser Cast et le fn_varbintohexstr?

+1

La fonction HEX est de convertir un ENTIER (ou INT8 ou BIGINT) à une chaîne hexagonale. Que recherchez-vous en tant que sortie de HEX_STRING ("xyz")? –

+0

En outre, il est courtois de choisir une réponse - ou si rien ne répond à votre question, il est judicieux d'éditer votre question afin qu'elle puisse être comprise. Vous devriez viser à sélectionner la meilleure réponse - s'il vous plaît. –

+0

Vous devriez reformuler votre question. Évidemment, vous ne voulez pas interpréter la chaîne comme un nombre ("12" -> 12). Il semble que vous voulez convertir les octets sous-jacents en hexadécimal. ("abc" -> hex). Voulez-vous des codes ASCII, Unicode, autre chose? Être spécifique. – colithium

Répondre

17

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, il est dans MS-SQL.

Je viens d'essayer dans mon serveur SQL MMC sur un de mes tableaux:

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

Cela a fonctionné comme prévu. peut-être ce que je sais que master.dbo.fn_varbintohexstr sur MS-SQL, pourrait être similaire à Informix fonction hexagonale(), alors essayez peut-être:

SELECT  hex(CAST(Addr1 AS VARBINARY)) AS Expr1 
FROM   Customer 
+1

Je pense que vous avez répondu à la question qu'il voulait poser. +1 – colithium

+2

Même dans MSSQL cette fonction n'est pas supportée/documentée. L'utilisation de la fonction n'est pas recommandée si vous avez besoin d'une compatibilité avec les futures versions du serveur MS SQL. – Faiz

0

S'il est possible pour vous de le faire dans le client de base de données le code 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 vous le souhaitez. Je revérifierais que la valeur d'entrée est rognée et dans le format d'abord, cela pourrait être aussi simple. Ensuite, je consulte la documentation de la base de données qui décrit la fonction hexadécimale et vois quelle serait sa contribution attendue et compare cela à certaines de vos valeurs et découvre quelle est la différence et comment changer vos valeurs pour correspondre à celle de l'entrée attendue. Une recherche google simple pour "fonction hex informix" a soulevé la première page de résultat avec la phrase: "Doit être un entier littéral ou une autre expression qui renvoie un nombre entier". Si votre type de données est une chaîne, convertissez d'abord la chaîne en entier. On dirait qu'à première vue, vous faites quelque chose avec la fonction de moulage (je ne suis pas sûr à ce sujet).

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

Malheureusement, votre solution ne fonctionnerait que si la chaîne est bien un nombre qui n'est pas mon cas ... –

0

Old Post, mais dans mon cas je aussi a dû enlever la partie 0x de l'hexagone donc j'ai utilisé le code ci-dessous. (J'utilise MS SQL)

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