Sql 将整数转换为十六进制,将十六进制转换为整数
因此,我在Sybase中使用了此查询(其中,Sql 将整数转换为十六进制,将十六进制转换为整数,sql,sql-server,integer,hex,Sql,Sql Server,Integer,Hex,因此,我在Sybase中使用了此查询(其中,signal\u data是一列),但在Microsoft SQL Server中不起作用: HEXTOINT(SUBSTRING((INTTOHEX(signal_data)),5,2)) as Signal 我在Excel中也有它(其中A1包含值): 有人知道我将如何在SQL Server中执行此操作吗?将INT转换为十六进制: SELECT CONVERT(VARBINARY(8), 16777215) 将十六进制转换为整数: SELECT
signal\u data
是一列),但在Microsoft SQL Server中不起作用:
HEXTOINT(SUBSTRING((INTTOHEX(signal_data)),5,2)) as Signal
我在Excel中也有它(其中A1
包含值):
有人知道我将如何在SQL Server中执行此操作吗?将INT转换为十六进制:
SELECT CONVERT(VARBINARY(8), 16777215)
将十六进制转换为整数:
SELECT CONVERT(INT, 0xFFFFFF)
更新2015-03-16
上面的示例有一个限制,即它仅在十六进制值作为整数文本给定时才起作用。为完整起见,如果要转换的值是十六进制字符串(例如在varchar列中),请使用:
注意:字符串必须包含偶数个十六进制数字。奇数位数将产生错误
有关更多详细信息,请参阅的“二进制样式”部分。我认为需要SQL Server 2008或更高版本。将INT转换为十六进制:
SELECT CONVERT(VARBINARY(8), 16777215)
将十六进制转换为整数:
SELECT CONVERT(INT, 0xFFFFFF)
更新2015-03-16
上面的示例有一个限制,即它仅在十六进制值作为整数文本给定时才起作用。为完整起见,如果要转换的值是十六进制字符串(例如在varchar列中),请使用:
注意:字符串必须包含偶数个十六进制数字。奇数位数将产生错误
有关更多详细信息,请参阅的“二进制样式”部分。我相信SQL Server 2008或更高版本是必需的。使用
master.dbo.fnbintohexstr(16777215)
转换为varchar
表示。使用master.dbo.fnbintohexstr(16777215)
转换为varchar
表示。以下是SQL server的函数,它将整数值转换为varchar的十六进制表示形式。它应该很容易适应其他数据库类型
例如:
SELECT dbo.ToHex(4095) --> FFF
SELECT 100, master.dbo.fn_varbintohexstr(100)
CREATE FUNCTION [dbo].[IntToAlpha](@Value int)
RETURNS varchar(30)
AS
BEGIN
DECLARE @CodeChars varchar(100)
SET @CodeChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
DECLARE @CodeLength int = 26
DECLARE @Result varchar(30) = ''
DECLARE @Digit char(1)
SET @Result = SUBSTRING(@CodeChars, (@Value % @CodeLength) + 1, 1)
WHILE @Value > 0
BEGIN
SET @Digit = SUBSTRING(@CodeChars, ((@Value / @CodeLength) % @CodeLength) + 1, 1)
SET @Value = @Value / @CodeLength
IF @Value <> 0 SET @Result = @Digit + @Result
END
RETURN @Result
END
SQL:
创建函数ToHex(@value int)
返回varchar(50)
作为
开始
声明@seq char(16)
声明@result varchar(50)
声明@数字字符(1)
SET@seq='0123456789ABCDEF'
设置@result=SUBSTRING(@seq,(@value%16)+1,1)
而@value>0
开始
设置@digit=SUBSTRING(@seq,((@value/16)%16)+1,1)
设置@value=@value/16
如果@value 0设置@result=@digit+@result
结束
返回@result
结束
去
这是SQL server的函数,它将整数值转换为其十六进制表示形式,即varchar。它应该很容易适应其他数据库类型
例如:
SELECT dbo.ToHex(4095) --> FFF
SELECT 100, master.dbo.fn_varbintohexstr(100)
CREATE FUNCTION [dbo].[IntToAlpha](@Value int)
RETURNS varchar(30)
AS
BEGIN
DECLARE @CodeChars varchar(100)
SET @CodeChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
DECLARE @CodeLength int = 26
DECLARE @Result varchar(30) = ''
DECLARE @Digit char(1)
SET @Result = SUBSTRING(@CodeChars, (@Value % @CodeLength) + 1, 1)
WHILE @Value > 0
BEGIN
SET @Digit = SUBSTRING(@CodeChars, ((@Value / @CodeLength) % @CodeLength) + 1, 1)
SET @Value = @Value / @CodeLength
IF @Value <> 0 SET @Result = @Digit + @Result
END
RETURN @Result
END
SQL:
创建函数ToHex(@value int)
返回varchar(50)
作为
开始
声明@seq char(16)
声明@result varchar(50)
声明@数字字符(1)
SET@seq='0123456789ABCDEF'
设置@result=SUBSTRING(@seq,(@value%16)+1,1)
而@value>0
开始
设置@digit=SUBSTRING(@seq,((@value/16)%16)+1,1)
设置@value=@value/16
如果@value 0设置@result=@digit+@result
结束
返回@result
结束
去
给定:
declare @hexStr varchar(16), @intVal int
select @hexStr = convert(varbinary, @intVal, 1)
declare
@query varchar(100),
@parameters varchar(50)
select
@query = 'select @result = convert(int,' + @hb + ')',
@parameters = '@result int output'
exec master.dbo.Sp_executesql @query, @parameters, @intVal output
inttohextr:
declare @hexStr varchar(16), @intVal int
select @hexStr = convert(varbinary, @intVal, 1)
declare
@query varchar(100),
@parameters varchar(50)
select
@query = 'select @result = convert(int,' + @hb + ')',
@parameters = '@result int output'
exec master.dbo.Sp_executesql @query, @parameters, @intVal output
hexstroint:
declare @hexStr varchar(16), @intVal int
select @hexStr = convert(varbinary, @intVal, 1)
declare
@query varchar(100),
@parameters varchar(50)
select
@query = 'select @result = convert(int,' + @hb + ')',
@parameters = '@result int output'
exec master.dbo.Sp_executesql @query, @parameters, @intVal output
给定:
declare @hexStr varchar(16), @intVal int
select @hexStr = convert(varbinary, @intVal, 1)
declare
@query varchar(100),
@parameters varchar(50)
select
@query = 'select @result = convert(int,' + @hb + ')',
@parameters = '@result int output'
exec master.dbo.Sp_executesql @query, @parameters, @intVal output
inttohextr:
declare @hexStr varchar(16), @intVal int
select @hexStr = convert(varbinary, @intVal, 1)
declare
@query varchar(100),
@parameters varchar(50)
select
@query = 'select @result = convert(int,' + @hb + ')',
@parameters = '@result int output'
exec master.dbo.Sp_executesql @query, @parameters, @intVal output
hexstroint:
declare @hexStr varchar(16), @intVal int
select @hexStr = convert(varbinary, @intVal, 1)
declare
@query varchar(100),
@parameters varchar(50)
select
@query = 'select @result = convert(int,' + @hb + ')',
@parameters = '@result int output'
exec master.dbo.Sp_executesql @query, @parameters, @intVal output
实际上,内置函数名为master.dbo.fn_varbintohextr 例如:
SELECT dbo.ToHex(4095) --> FFF
SELECT 100, master.dbo.fn_varbintohexstr(100)
CREATE FUNCTION [dbo].[IntToAlpha](@Value int)
RETURNS varchar(30)
AS
BEGIN
DECLARE @CodeChars varchar(100)
SET @CodeChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
DECLARE @CodeLength int = 26
DECLARE @Result varchar(30) = ''
DECLARE @Digit char(1)
SET @Result = SUBSTRING(@CodeChars, (@Value % @CodeLength) + 1, 1)
WHILE @Value > 0
BEGIN
SET @Digit = SUBSTRING(@CodeChars, ((@Value / @CodeLength) % @CodeLength) + 1, 1)
SET @Value = @Value / @CodeLength
IF @Value <> 0 SET @Result = @Digit + @Result
END
RETURN @Result
END
给你
100 0x00000064实际上,内置函数名为master.dbo.fn_varbintohexstr 例如:
SELECT dbo.ToHex(4095) --> FFF
SELECT 100, master.dbo.fn_varbintohexstr(100)
CREATE FUNCTION [dbo].[IntToAlpha](@Value int)
RETURNS varchar(30)
AS
BEGIN
DECLARE @CodeChars varchar(100)
SET @CodeChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
DECLARE @CodeLength int = 26
DECLARE @Result varchar(30) = ''
DECLARE @Digit char(1)
SET @Result = SUBSTRING(@CodeChars, (@Value % @CodeLength) + 1, 1)
WHILE @Value > 0
BEGIN
SET @Digit = SUBSTRING(@CodeChars, ((@Value / @CodeLength) % @CodeLength) + 1, 1)
SET @Value = @Value / @CodeLength
IF @Value <> 0 SET @Result = @Digit + @Result
END
RETURN @Result
END
给你
100 0x00000064传统的4位十六进制非常直接。 十六进制字符串到整数(假设值存储在名为FHexString的字段中): 整数到十六进制字符串(假设值存储在名为FInteger的字段中): 需要注意的重要一点是,当您开始使用导致寄存器共享的位大小时,特别是在intel计算机上,由于intel的小端性质,寄存器中的高、低和左、右将被交换。例如,当使用varbinary(3)时,我们谈论的是6个字符的十六进制。在这种情况下,您的位从右到左配对为以下索引“54,32,10”。在英特尔系统中,您可能会看到“76,54,32,10”。因为您只使用了8个中的6个,所以您需要记住自己进行交换。“76,54”将符合您的左侧条件,“32,10”将符合您的右侧条件。逗号分隔你的高低。英特尔先交换高点和低点,然后交换左边和右边。因此,要进行转换…叹气,您必须自己交换它们。例如,以下转换8个字符十六进制中的前6个字符:
(SELECT master.dbo.fn_replvarbintoint(
CONVERT(varbinary(3),(SELECT master.dbo.fn_cdc_hexstrtobin(
--intel processors, registers are switched, so reverse them
----second half
RIGHT(FHex8,2)+ --0,1 (0 indexed)
LEFT(RIGHT(FHex8,4),2)+ -- 2,3 (oindex)
--first half
LEFT(RIGHT(FHex8,6),2) --4,5
)))
))
这有点复杂,所以我会尽量将转换保持为8个字符的十六进制(varbinary(4))
总之,这应该能回答你的问题。全面的 传统的4位十六进制非常直接。
Declare @Dato xml
Set @Dato = Convert(xml, '<dato>FF</dato>')
Select Cast( rw.value( 'xs:hexBinary( text()[1])' , 'varbinary(max)' ) as int ) From @Dato.nodes('dato') as T(rw)
十六进制字符串到整数(假设值存储在名为FHexString的字段中):
整数到十六进制字符串(假设值存储在名为FInteger的字段中):
需要注意的重要一点是,当您开始使用导致寄存器共享的位大小时,特别是在intel计算机上,由于intel的小端性质,寄存器中的高、低和左、右将被交换。例如,当使用varbinary(3)时,我们谈论的是6个字符的十六进制。在这种情况下,您的位从右到左配对为以下索引“54,32,10”。在英特尔系统中,您可能会看到“76,54,32,10”。因为您只使用了8个中的6个,所以您需要记住自己进行交换。“76,54”将符合您的左侧条件,“32,10”将符合您的右侧条件。逗号分隔你的高低。英特尔先交换高点和低点,然后交换左边和右边。因此,要进行转换…叹气,您必须自己交换它们。例如,以下转换8个字符十六进制中的前6个字符:
(SELECT master.dbo.fn_replvarbintoint(
CONVERT(varbinary(3),(SELECT master.dbo.fn_cdc_hexstrtobin(
--intel processors, registers are switched, so reverse them
----second half
RIGHT(FHex8,2)+ --0,1 (0 indexed)
LEFT(RIGHT(FHex8,4),2)+ -- 2,3 (oindex)
--first half
LEFT(RIGHT(FHex8,6),2) --4,5
)))
))
这有点复杂,所以我会尽量将转换保持为8个字符的十六进制(varbinary(4))
总之,这应该能回答你的问题。全面的 Declare@Dato-xml
Declare @Dato xml
Set @Dato = Convert(xml, '<dato>FF</dato>')
Select Cast( rw.value( 'xs:hexBinary( text()[1])' , 'varbinary(max)' ) as int ) From @Dato.nodes('dato') as T(rw)
Set@Dato=Convert(xml,'FF')
选择演员阵容(