2013-06-21 45 views
5

Làm thế nào để bạn chuyển đổi một số nguyên thành một chuỗi hex? Tôi muốn chuyển đổi các int thành một định dạng mà tôi có thể sử dụng như một màu trên trang của tôi ví dụ '# ff0000'.SQL: Chuyển đổi một số nguyên thành chuỗi thập lục phân?

Vì vậy, ví dụ:

--This converts my int to hex: 
CONVERT(VARBINARY(8), Color) Color, 

Và tôi muốn làm một cái gì đó như thế này:

'#' + CONVERT(NVARCHAR(10), CONVERT(VARBINARY(8), Color)) Color 

Nhưng chuyển đổi một chuỗi varbinary chỉ chuyển nó đến một nhân vật ascii thay vì trở về chuỗi hex thực tế

+0

Điều đó có vẻ là để chuyển đổi một int thành một định dạng hex như # 0xFF4B0082. Tôi cần một định dạng chuỗi mà tôi có thể nối thêm '#' vào đầu như '# 4B0082' – user1636130

Trả lời

7

Có chức năng tích hợp để tạo các chuỗi hex từ giá trị nhị phân

SELECT 
    '#' + sys.fn_varbintohexstr(CONVERT(BINARY(3), 0)), 
    '#' + sys.fn_varbintohexstr(CONVERT(BINARY(3), 255)) 

Bạn cần binary(3) để đảm bảo độ dài chính xác của chuỗi đầu ra
này là sai. Bạn nhận được 4 chữ số hex vì 0 đến 255 sau đây là 4 byte int giá trị

SELECT 
    '#' + sys.fn_varbintohexstr(CONVERT(varBINARY(8), 0)), 
    '#' + sys.fn_varbintohexstr(CONVERT(varBINARY(8), 255)) 

Tháng 10 năm 2017 Cập nhật:

Việc quy đổi hiện đang được xây dựng trong SQL Server (từ năm 2008 !!) vì vậy chúng tôi có thể chỉ đơn giản sử dụng CONVERT

SELECT '#' + CONVERT(char(6), CONVERT(BINARY(3), 2570841), 2) 
+0

Rất cám ơn sự giúp đỡ của bạn! Tôi không thể nhận thấy bất kỳ sự khác biệt giữa hai tùy chọn ở đây. Cuối cùng, tôi đã sử dụng RIGHT (, 6) để cắt '0x' mà các hàm này trả về sự bắt đầu của chuỗi và nó hoạt động! Cảm ơn một lần nữa x – user1636130

+1

Giá trị được trả về bởi hàm này bắt đầu bằng '0x', vì vậy bạn cần' RIGHT (..., 6) 'quanh' sys.fn_varbintohexstr' để tạo thành '# FF00FF'. – Stoleg

+0

(Nhận ra câu trả lời này là hơn bốn tuổi -) Tại sao không sử dụng [sử dụng 'CONVERT'] (https://www.sqlservercentral.com/Forums/1708816/Replacement-for-using-fnvarbintohexstr#bm1708994)? 'SELECT CONVERT (VARCHAR (8), CONVERT (VARBINARY (8), 987654321), 2)'? – ruffin

2

Chuyển đổi từ int để varbinary là tiềm ẩn trong SQL SERVER, vì vậy bạn cũng có thể sử dụng CHỌN sys.fn_varbintohexstr (1234567) và bạn đã hoàn tất.

Nhưng hãy cẩn thận các giá trị BIGINT, vì các chữ số dài được hiểu là giá trị DECIMAL và không phải là BIGINT. Số thập phân có dữ liệu tiền tố để giữ độ chính xác, và thứ tự byte được đảo ngược, và đó là lý do tại sao bạn có được điều này:

select sys.fn_varbintohexstr(2147483648) 

lợi nhuận 0x0A00000100000080

Bạn cần phải chuyển đổi một cách rõ ràng để bigint:

select select sys.fn_varbintohexstr(CONVERT(BIGINT(2147483648)) 

trả về 0x0000000080000000

Các vấn đề liên quan