在SQL中将整数转换为六

时间:2018-11-22 10:36:55

标签: sql-server

我想在SQL中将int转换为hexadecimal

示例:

SELECT CONVERT(VARBINARY(8), 162)
  

结果:0x000000A2

实际值是这个

  

A2

为什么我在前缀处得到不必要的部分?

我可以删除前面的部分吗?

正确的处理方式是什么?

3 个答案:

答案 0 :(得分:2)

引用documentation

  

将其他数据类型转换为二进制或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编写这种表示代码,这不是它的优点。当您向用户显示值时,担心使它看起来很漂亮。