Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Chuyển đổi BINARY được lưu trữ dưới dạng VARCHAR thành BINARY

Kết quả bạn nhận được là do chuỗi "0003f80075177fe6" (VARCHAR giá trị) được chuyển đổi thành điểm mã và các điểm mã này được phục vụ như một giá trị nhị phân. Vì có thể bạn đang sử dụng đối chiếu tương thích ASCII, điều đó có nghĩa là bạn nhận được các điểm mã ASCII:0 là 48 (30 hex), f là 102 (66 hex), v.v. Điều này giải thích 30 30 30 33 66 38 30 30...

Thay vào đó, những gì bạn muốn làm là phân tích cú pháp chuỗi dưới dạng đại diện thập lục phân của các byte (00 03 f8 00 75 71 77 fe 66 ). CONVERT chấp nhận một tham số "style" bổ sung cho phép bạn chuyển đổi chuỗi lục giác:

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

Kiểu 2 chuyển đổi một chuỗi lục phân thành hệ nhị phân. (Kiểu 1 thực hiện tương tự đối với các chuỗi bắt đầu bằng "0x", điều này không đúng ở đây.)

Lưu ý rằng nếu có ít hơn 16 byte (như trong trường hợp này), giá trị được đệm bên phải bằng các số 0 (0x0003F80075177FE60000000000000000 ). Thay vào đó, nếu bạn cần nó được đệm bên trái, bạn phải tự làm điều đó:

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

Cuối cùng, lưu ý rằng có thể chỉ định các ký tự nhị phân mà không cần chuyển đổi bằng cách đặt tiền tố chúng bằng "0x" và không sử dụng dấu ngoặc kép:SELECT 0x0003f80075177fe6 sẽ trả về một cột thuộc loại BINARY(8) . Không có liên quan cho truy vấn này, nhưng chỉ cho sự đầy đủ.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kết nối với SQL Server 2008 từ xa từ Windows Azure

  2. Chọn 10 phần trăm trên cùng, cũng là phần trăm dưới cùng trong SQL Server

  3. Truy vấn SELECT có luôn trả về các hàng theo cùng một thứ tự không? Bảng có chỉ mục được phân nhóm

  4. Gặp lỗi kỳ lạ, truy vấn SQL Server sử dụng mệnh đề `WITH`

  5. Truyền DataTable tới thủ tục được lưu trữ dưới dạng đối số