Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Konwertuj plik BINARY przechowywany jako VARCHAR na BINARY

Otrzymany wynik jest taki, że ciąg "0003f80075177fe6" (VARCHAR wartość) jest konwertowana na punkty kodowe, a te punkty kodowe są podawane jako wartość binarna. Ponieważ prawdopodobnie używasz sortowania zgodnego z ASCII, oznacza to, że otrzymujesz punkty kodowe ASCII:0 to 48 (30 szesnastkowych), f to 102 (66 hex) i tak dalej. To wyjaśnia 30 30 30 33 66 38 30 30...

Zamiast tego chcesz przeanalizować ciąg znaków jako szesnastkową reprezentację bajtów (00 03 f8 00 75 71 77 fe 66 ). CONVERT akceptuje dodatkowy parametr „style”, który umożliwia konwersję ciągów heksadecymalnych:

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

Styl 2 konwertuje ciąg heksadecymalny na binarny. (Styl 1 robi to samo dla ciągów zaczynających się od „0x”, co nie ma miejsca w tym przypadku).

Zauważ, że jeśli jest mniej niż 16 bajtów (jak w tym przypadku), wartość jest dopełniana zerami z prawej strony (0x0003F80075177FE60000000000000000 ). Jeśli potrzebujesz go z wyściółką lewą, musisz to zrobić sam:

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

Na koniec zauważ, że literały binarne można określić bez konwersji, po prostu poprzedzając je „0x” i nie używając cudzysłowów:SELECT 0x0003f80075177fe6 zwróci kolumnę typu BINARY(8) . Nie dotyczy tego zapytania, ale tylko dla kompletności.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wyzwalacze programu SQL Server — część 2 — wyzwalacze DDL i LOGON

  2. Pakiet SSIS wykonany w agencie serwera nie wykonuje swojej pracy (nawet podczas raportowania sukcesu)

  3. Jak wypisać wszystkie daty między dwiema datami?

  4. Jak mogę uzyskać maksymalną datę (na klucz podstawowy) i uzyskać różnicę w stosunku do daty z innej tabeli?

  5. Nie można zarejestrować domyślnej instancji MSSQLSERVER w SQL Server 2008