如何将整数转换为十六进制的字符串? 我想将int转换为我可以在页面上用作颜色的格式,例如'#ff0000'。
例如:
--This converts my int to hex:
CONVERT(VARBINARY(8), Color) Color,
我想做这样的事情:
'#' + CONVERT(NVARCHAR(10), CONVERT(VARBINARY(8), Color)) Color
但转换varbinary字符串只是将其转换为ascii字符而不是返回实际的十六进制字符串
答案 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