sql >> Database teknologi >  >> RDS >> Sqlserver

Konverter en BINÆR, der er gemt som VARCHAR, til BINÆR

Resultatet, du får, skyldes, at strengen "0003f80075177fe6" (en VARCHAR værdi) konverteres til kodepunkter, og disse kodepunkter serveres som en binær værdi. Da du sandsynligvis bruger en ASCII-kompatibel sortering, betyder det, at du får ASCII-kodepunkterne:0 er 48 (30 hex), f er 102 (66 hex) og så videre. Dette forklarer 30 30 30 33 66 38 30 30...

Det, du vil gøre i stedet, er at analysere strengen som en hexadecimal repræsentation af bytes (00 03 f8 00 75 71 77 fe 66 ). CONVERT accepterer en ekstra "stil" parameter, der giver dig mulighed for at konvertere hexstrings:

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

Style 2 konverterer en hexstring til binær. (Stil 1 gør det samme for strenge, der starter med "0x", hvilket ikke er tilfældet her.)

Bemærk, at hvis der er mindre end 16 bytes (som i dette tilfælde), er værdien højrepolstret med nuller (0x0003F80075177FE60000000000000000 ). Hvis du i stedet skal bruge den venstrepolstret, skal du selv gøre det:

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

Bemærk endelig, at binære bogstaver kan specificeres uden konvertering blot ved at sætte dem foran med "0x" og ikke bruge anførselstegn:SELECT 0x0003f80075177fe6 returnerer en kolonne af typen BINARY(8) . Ikke relevant for denne forespørgsel, men bare for fuldstændighedens skyld.




  1. PL/Python &postgreSQL:Hvad er den bedste måde at returnere en tabel med mange kolonner på?

  2. Henvisning til ydre forespørgsels tabeller i en underforespørgsel

  3. Overvågning af læse-/skriveforsinkelse

  4. hvordan man formaterer datofelt i MYSQL