【问题标题】:SQL: Convert an integer into a hex string?SQL:将整数转换为十六进制字符串?
【发布时间】:2013-06-18 16:08:36
【问题描述】:

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

例如:

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

我想做这样的事情:

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

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

【问题讨论】:

  • 这似乎是为了将 int 转换为像 #0xFF4B0082 这样的十六进制格式。我需要一个字符串格式,我可以在 '#4B0082' 之类的开头附加一个 '#'

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


【解决方案1】:

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

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)

【讨论】:

  • 非常感谢您的帮助!我在这里没有注意到这两个选项之间的任何区别。最后,我使用 RIGHT( , 6) 来修剪这些函数返回字符串开头的“0x”,并且它起作用了!再次感谢 x
  • 这个函数返回的值是以0x开头的,所以你需要RIGHT (... , 6)sys.fn_varbintohexstr周围才能看起来像#FF00FF
  • (意识到这个答案已经有四年多了--)为什么不使用use CONVERTSELECT CONVERT(VARCHAR(8),CONVERT(VARBINARY(8), 987654321),2)?
  • @ruffin:该语法仅在 SQL Server 2008 中添加。比较 msdn.microsoft.com/en-us/library/ms187928(v=sql.90).aspxmsdn.microsoft.com/en-us/library/ms187928(v=sql.100).aspx“二进制样式”。 OP 使用的是 SQL Server 2008,但我可能混淆了哪个版本是哪个
【解决方案2】:

从 int 到 varbinary 的转换在 SQL SERVER 中是隐式的,所以你也可以使用 选择 sys.fn_varbintohexstr(1234567) 你就完成了。

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

select sys.fn_varbintohexstr(2147483648)

返回 0x0A00000100000080

您需要显式转换为 BIGINT:

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

返回 0x0000000080000000

【讨论】:

    猜你喜欢
    • 2015-11-29
    • 2017-08-12
    • 2014-12-15
    • 2013-12-07
    相关资源
    最近更新 更多