Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Преобразувайте BINARY, съхранен като VARCHAR, в BINARY

Резултатът, който получавате, е защото низът "0003f80075177fe6" (a VARCHAR стойност) се преобразува в кодови точки и тези кодови точки се сервират като двоична стойност. Тъй като вероятно използвате ASCII-съвместима колация, това означава, че получавате ASCII кодовите точки:0 е 48 (30 шестнадесетичен), f е 102 (66 шестнадесетичен) и така нататък. Това обяснява 30 30 30 33 66 38 30 30...

Това, което искате да направите вместо това, е да анализирате низа като шестнадесетично представяне на байтовете (00 03 f8 00 75 71 77 fe 66 ). CONVERT приема допълнителен параметър "стил", който ви позволява да конвертирате шестнадесетични низове:

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

Стил 2 преобразува шестнадесетичен низ в двоичен. (Стил 1 прави същото за низове, които започват с "0x", което не е случаят тук.)

Имайте предвид, че ако има по-малко от 16 байта (както в този случай), стойността е допълнена отдясно с нули (0x0003F80075177FE60000000000000000 ). Ако вместо това ви трябва ляво подплатено, трябва да го направите сами:

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

И накрая, имайте предвид, че двоичните литерали могат да бъдат зададени без преобразуване, просто като им поставите префикс "0x" и не използвате кавички:SELECT 0x0003f80075177fe6 ще върне колона от тип BINARY(8) . Не е от значение за тази заявка, но само за пълнота.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server, еквивалентен на DBMS_METADATA.GET_DDL

  2. Вземете всички дати между две дати в SQL Server

  3. Как да актуализирам стойност на xml атрибут в xml променлива с помощта на t-sql?

  4. Извличане на последния запис във всяка група от база данни - SQL Server 2005/2008

  5. Концепции за проектиране на база данни със SQL Server Management Studio (SSMS) Част 1