12 Stimmen

Konvertierung einer Zeichenkette in HEX in SQL

Ich suche nach einer Möglichkeit, eine echte Zeichenkette in ihren hexadezimalen Wert in SQL umzuwandeln. Ich suche etwas, das Informix-freundlich ist, aber ich würde natürlich etwas Datenbank-neutrales bevorzugen

Hier ist die Auswahl, die ich jetzt verwende:

SELECT SomeStringColumn from SomeTable

Hier ist die Auswahl, die ich gerne verwenden würde: SELECT hex( SomeStringColumn ) from SomeTable

Leider ist nichts so einfach... Informix gibt mir diese Meldung: Fehler bei der Umwandlung von Zeichen in numerische Werte

Irgendeine Idee?

21voto

stephenbayer Punkte 12054

Können Sie Cast und fn_varbintohexstr verwenden?

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

Ich bin nicht sicher, ob Sie diese Funktion in Ihrem Datenbanksystem haben, sie befindet sich in MS-SQL.

Ich habe es gerade in meiner SQL Server MMC für eine meiner Tabellen ausprobiert:

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

Dies funktionierte wie erwartet. möglicherweise, was ich weiß, wie master.dbo.fn_varbintohexstr auf MS-SQL, könnte ähnlich wie informix hex() Funktion, so möglicherweise versuchen:

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

9voto

jhamm Punkte 1790

Das Folgende funktioniert in Sql 2005.

select convert(varbinary, SomeStringColumn) from SomeTable

1voto

Ben Punkte 41

Versuchen Sie dies:

select convert(varbinary, '0xa3c0', 1)

Die Hexadezimalzahl muss eine gerade Anzahl von Ziffern haben. Um das zu umgehen, versuchen Sie es:

select convert(varbinary, '0x' +  RIGHT('00000000' + REPLACE('0xa3c','0x',''), 8), 1)

0voto

Josh Punkte 16859

Wenn es Ihnen möglich ist, dies im Datenbank-Client im Code zu tun, könnte es einfacher sein.

Andernfalls bedeutet die Fehlermeldung wahrscheinlich, dass die eingebaute Hex-Funktion nicht wie erwartet mit Ihren Werten arbeiten kann. Ich würde zuerst überprüfen, ob der Eingabewert getrimmt und im richtigen Format ist, so einfach kann es sein. Dann würde ich die Datenbankdokumentation konsultieren, in der die Hex-Funktion beschrieben ist, und nachsehen, wie die erwartete Eingabe aussehen würde, und diese mit einigen Ihrer Werte vergleichen, um herauszufinden, worin der Unterschied besteht und wie Sie Ihre Werte so ändern können, dass sie der erwarteten Eingabe entsprechen.

Eine einfache Google-Suche nach "informix hex function" brachte die erste Ergebnisseite mit dem Satz: "Muss ein Ganzzahl-Literal oder ein anderer Ausdruck sein, der eine Ganzzahl zurückgibt". Wenn Ihr Datentyp eine Zeichenkette ist, konvertieren Sie die Zeichenkette zunächst in eine ganze Zahl. Auf den ersten Blick sieht es so aus, als ob Sie etwas mit der cast-Funktion machen (ich bin mir da nicht sicher).

select hex(cast SomeStringColumn as int)) from SomeTable

0voto

gusmundo Punkte 1

OLD Post, aber in meinem Fall musste ich auch den 0x-Teil des Hex entfernen, also habe ich den folgenden Code verwendet. (Ich verwende MS SQL)

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X