我想在SQL中将int
转换为hexadecimal
。
示例:
SELECT CONVERT(VARBINARY(8), 162)
结果:0x000000A2
实际值是这个
A2
为什么我在前缀处得到不必要的部分?
我可以删除前面的部分吗?
正确的处理方式是什么?
答案 0 :(得分:2)
将其他数据类型转换为二进制或varbinary时,数据将在左侧填充或截断。通过使用十六进制零来实现填充。
您在查询中指定VARBINARY(8)
,因此结果将以零填充到该长度。如果出于某种原因需要不带填充的值,请指定VARBINARY(1)
,它将返回0xA2
。
注意:它们都是相同的值
或者,如果您只需要2个字符串:
SELECT RIGHT(CONVERT(VARCHAR(8),CONVERT(VARBINARY(8),162),2), 2)
哪个将返回A2
答案 1 :(得分:0)
在没有操作者任何回应的情况下,完全可以完全猜出:
SELECT V.BloatedHex,
ISNULL(STUFF(V.BloatedHex,1,NULLIF(PATINDEX('%[^0]%',V.BloatedHex),0)-1,''),0)
FROM (VALUES(STUFF(CONVERT(varchar(10),CONVERT(varbinary(8),162),1),1,2,''))) V(BloatedHex);
这将返回 varchar(10)
值'A2'
。
答案 2 :(得分:0)
您可以在这样的一条语句中做到这一点,
DECLARE @someNumber BIGINT = 162;
WITH Hex AS (
SELECT CONVERT(VARCHAR(34), CONVERT(VARBINARY(8), @someNumber), 2) [Value]
)
SELECT SUBSTRING([Value], PATINDEX('%[^0]%', [Value]), 34) FROM Hex
;
这不使用任何不受支持的内部函数,并尝试最小化字符串操作。
更好的是,不要用TSQL编写这种表示代码,这不是它的优点。当您向用户显示值时,担心使它看起来很漂亮。