Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wandeln Sie eine als VARCHAR gespeicherte BINARY in BINARY um

Das Ergebnis, das Sie erhalten, liegt daran, dass die Zeichenfolge "0003f80075177fe6" (ein VARCHAR Wert) wird in Codepunkte konvertiert, und diese Codepunkte werden als Binärwert ausgegeben. Da Sie wahrscheinlich eine ASCII-kompatible Sortierung verwenden, erhalten Sie die ASCII-Codepunkte:0 ist 48 (30 hex), f ist 102 (66 hex) und so weiter. Dies erklärt die 30 30 30 33 66 38 30 30...

Was Sie stattdessen tun möchten, ist die Zeichenfolge als hexadezimale Darstellung der Bytes zu analysieren (00 03 f8 00 75 71 77 fe 66 ). CONVERT akzeptiert einen zusätzlichen "style"-Parameter, mit dem Sie Hexstrings konvertieren können:

SELECT CONVERT(BINARY(16), '0003f80075177fe6', 2)

Stil 2 wandelt einen Hexstring in einen Binärwert um. (Stil 1 macht dasselbe für Strings, die mit „0x“ beginnen, was hier nicht der Fall ist.)

Beachten Sie, dass bei weniger als 16 Bytes (wie in diesem Fall) der Wert rechts mit Nullen aufgefüllt wird (0x0003F80075177FE60000000000000000 ). Wenn Sie es stattdessen links aufgefüllt benötigen, müssen Sie das selbst tun:

SELECT CONVERT(BINARY(16), RIGHT(REPLICATE('00', 16) + '0003f80075177fe6', 32), 2)

Beachten Sie schließlich, dass binäre Literale ohne Konvertierung angegeben werden können, indem Sie ihnen einfach "0x" voranstellen und keine Anführungszeichen verwenden:SELECT 0x0003f80075177fe6 gibt eine Spalte vom Typ BINARY(8) zurück . Nicht relevant für diese Abfrage, sondern nur der Vollständigkeit halber.