sql >> Databáze >  >> RDS >> Sqlserver

Převeďte BINARY uloženou jako VARCHAR na BINARY

Výsledkem je, že řetězec "0003f80075177fe6" (VARCHAR hodnota) se převede na kódové body a tyto kódové body se zobrazí jako binární hodnota. Protože pravděpodobně používáte řazení kompatibilní s ASCII, znamená to, že získáte body kódu ASCII:0 je 48 (30 hex), f je 102 (66 hex) a tak dále. To vysvětluje 30 30 30 33 66 38 30 30...

Místo toho chcete analyzovat řetězec jako hexadecimální reprezentaci bajtů (00 03 f8 00 75 71 77 fe 66 ). CONVERT přijímá další parametr „style“, který vám umožňuje převádět hexadecimální řetězce:

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

Styl 2 převede hexadecimální řetězec na binární. (Styl 1 dělá totéž pro řetězce začínající "0x", což není tento případ.)

Všimněte si, že pokud je méně než 16 bajtů (jako v tomto případě), je hodnota doplněna nulami (0x0003F80075177FE60000000000000000 ). Pokud místo toho potřebujete vycpávku vlevo, musíte to udělat sami:

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

Nakonec si uvědomte, že binární literály lze zadat bez převodu jednoduše tím, že jim předponu „0x“ a nepoužíváte uvozovky:SELECT 0x0003f80075177fe6 vrátí sloupec typu BINARY(8) . Pro tento dotaz to není relevantní, ale jen pro úplnost.




  1. Použít alias sloupce ve výpočtu vybraného příkazu Oracle SQL

  2. Nelze se přihlásit k serveru SQL Server 2008 pomocí nástroje příkazového řádku

  3. Agregát Oracle pro spojování řetězců čárkou a o psaní vlastních agregátů

  4. Postgresql, Omezit aktualizaci na konkrétní sloupce (pouze pro čtení)