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

时间:2013-06-21 13:39:19

标签: sql sql-server-2008 tsql colors hex

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

例如:

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

我想做这样的事情:

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

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

2 个答案:

答案 0 :(得分:8)

有一个内置函数可以从二进制值

生成十六进制字符串
SELECT
    '#' + sys.fn_varbintohexstr(CONVERT(BINARY(3), 0)),
    '#' + sys.fn_varbintohexstr(CONVERT(BINARY(3), 255))

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

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

2017年10月更新:

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

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

答案 1 :(得分:2)

在SQL SERVER中隐式从int转换为varbinary,因此您也可以使用 SELECT sys.fn_varbintohexstr(1234567) 你已经完成了。

但要注意BIGINT值,因为长数字文字被解释为DECIMAL值而不是BIGINT。小数有前缀数据来保持精度,字节顺序是相反的,这就是你得到这个的原因:

select sys.fn_varbintohexstr(2147483648)

返回0x0A00000100000080

您需要明确转换为BIGINT:

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

返回0x0000000080000000