Il risultato che ottieni è perché la stringa "0003f80075177fe6" (a VARCHAR
value) viene convertito in punti di codice e questi punti di codice vengono serviti come un valore binario. Dato che probabilmente stai utilizzando un confronto compatibile con ASCII, ciò significa che ottieni i punti di codice ASCII:0
è 48 (30 esadecimale), f
è 102 (66 esadecimale) e così via. Questo spiega il 30 30 30 33 66 38 30 30...
Quello che vuoi fare invece è analizzare la stringa come rappresentazione esadecimale dei byte (00 03 f8 00 75 71 77 fe 66
). CONVERT
accetta un parametro "stile" aggiuntivo che ti consente di convertire stringhe esadecimali:
SELECT CONVERT(BINARY(16), '0003f80075177fe6', 2)
Lo stile 2 converte una stringa esadecimale in binaria. (Lo stile 1 fa lo stesso per le stringhe che iniziano con "0x", che non è il caso qui.)
Nota che se sono presenti meno di 16 byte (come in questo caso), il valore viene riempito a destra con zeri (0x0003F80075177FE60000000000000000
). Se invece ti serve il tasto sinistro, devi farlo da solo:
SELECT CONVERT(BINARY(16), RIGHT(REPLICATE('00', 16) + '0003f80075177fe6', 32), 2)
Infine, nota che i letterali binari possono essere specificati senza conversione semplicemente anteponendo loro "0x" e non usando le virgolette:SELECT 0x0003f80075177fe6
restituirà una colonna di tipo BINARY(8)
. Non rilevante per questa query, ma solo per completezza.