SQL:将整数转换为十六进制字符串?

use*_*130 5 sql t-sql hex colors sql-server-2008

如何将整数转换为十六进制的字符串?我想将int转换为我可以在页面上用作颜色的格式,例如'#ff0000'.

例如:

--This converts my int to hex:
CONVERT(VARBINARY(8), Color) Color,
Run Code Online (Sandbox Code Playgroud)

我想做这样的事情:

'#' + CONVERT(NVARCHAR(10), CONVERT(VARBINARY(8), Color)) Color
Run Code Online (Sandbox Code Playgroud)

但转换varbinary字符串只是将其转换为ascii字符,而不是返回实际的十六进制字符串

gbn*_*gbn 8

有一个内置函数可以从二进制值生成十六进制字符串

SELECT
    '#' + sys.fn_varbintohexstr(CONVERT(BINARY(3), 0)),
    '#' + sys.fn_varbintohexstr(CONVERT(BINARY(3), 255))
Run Code Online (Sandbox Code Playgroud)

您需要binary(3)确保输出字符串的正确长度
这是错误的.你得到4个十六进制数字,因为0和255这里是4个字节的int

SELECT
    '#' + sys.fn_varbintohexstr(CONVERT(varBINARY(8), 0)),
    '#' + sys.fn_varbintohexstr(CONVERT(varBINARY(8), 255))
Run Code Online (Sandbox Code Playgroud)

2017年10月更新:

现在转换内置于SQL Server(自2008年起!!),因此我们可以简单地使用CONVERT

SELECT '#' + CONVERT(char(6), CONVERT(BINARY(3), 2570841), 2)
Run Code Online (Sandbox Code Playgroud)