Nic*_*nas 73 sql sql-server hex integer
所以我signal_data在Sybase中有这个查询工作(哪一个是列)但它在Microsoft SQL Server中不起作用:
HEXTOINT(SUBSTRING((INTTOHEX(signal_data)),5,2)) as Signal
Run Code Online (Sandbox Code Playgroud)
我也在Excel(A1包含值)中有它:
=HEX2DEC(LEFT(DEC2HEX(A1),LEN(DEC2HEX(A1))-2))
Run Code Online (Sandbox Code Playgroud)
有谁知道如何在SQL Server中执行此操作?
Bil*_*win 108
将INT转换为十六进制:
SELECT CONVERT(VARBINARY(8), 16777215)
Run Code Online (Sandbox Code Playgroud)
将十六进制转换为INT:
SELECT CONVERT(INT, 0xFFFFFF)
Run Code Online (Sandbox Code Playgroud)
上面的例子有一个限制,它只有在HEX值作为整数文字给出时才有效.为了完整性,如果要转换的值是十六进制字符串(例如在varchar列中找到),请使用:
-- If the '0x' marker is present:
SELECT CONVERT(INT, CONVERT(VARBINARY, '0x1FFFFF', 1))
-- If the '0x' marker is NOT present:
SELECT CONVERT(INT, CONVERT(VARBINARY, '1FFFFF', 2))
Run Code Online (Sandbox Code Playgroud)
注意:该字符串必须包含偶数个十六进制数字.奇数位数将产生错误.
更多细节可以在CAST和CONVERT(Transact-SQL)的"二进制样式"部分找到.我相信SQL Server 2008或更高版本是必需的.
jus*_*tts 43
实际上,内置函数名为master.dbo.fn_varbintohexstr.
所以,例如:
SELECT 100, master.dbo.fn_varbintohexstr(100)
Run Code Online (Sandbox Code Playgroud)
给你
100 0x00000064
小智 27
SQL Server与Excel的基于字符串的DEC2HEX,HEX2DEC函数等效:
--Convert INT to hex string:
PRINT CONVERT(VARCHAR(8),CONVERT(VARBINARY(4), 16777215),2) --DEC2HEX
--Convert hex string to INT:
PRINT CONVERT(INT,CONVERT(VARBINARY(4),'00FFFFFF',2)) --HEX2DEC
Run Code Online (Sandbox Code Playgroud)
小智 7
可以使用SQL Server 2012及更高版本上提供的FORMAT功能
select FORMAT(10,'x2')
Run Code Online (Sandbox Code Playgroud)
结果是:
0a
Run Code Online (Sandbox Code Playgroud)
这是SQL服务器的函数,它将整数值转换为其十六进制表示形式为varchar.应该很容易适应其他数据库类型
例如:
SELECT dbo.ToHex(4095) --> FFF
Run Code Online (Sandbox Code Playgroud)
SQL:
CREATE FUNCTION ToHex(@value int)
RETURNS varchar(50)
AS
BEGIN
DECLARE @seq char(16)
DECLARE @result varchar(50)
DECLARE @digit char(1)
SET @seq = '0123456789ABCDEF'
SET @result = SUBSTRING(@seq, (@value%16)+1, 1)
WHILE @value > 0
BEGIN
SET @digit = SUBSTRING(@seq, ((@value/16)%16)+1, 1)
SET @value = @value/16
IF @value <> 0 SET @result = @digit + @result
END
RETURN @result
END
GO
Run Code Online (Sandbox Code Playgroud)
传统的4位十六进制非常直接。十六进制字符串到整数(假定值存储在名为FHexString的字段中):
CONVERT(BIGINT,CONVERT(varbinary(4),
(SELECT master.dbo.fn_cdc_hexstrtobin(
LEFT(FMEID_ESN,8)
))
))
Run Code Online (Sandbox Code Playgroud)
十六进制字符串的整数(假定值存储在名为FInteger的字段中):
(SELECT master.dbo.fn_varbintohexstr(CONVERT(varbinary,CONVERT(int,
FInteger
))))
Run Code Online (Sandbox Code Playgroud)
需要注意的重要一点是,当您开始使用引起寄存器共享的位大小时,尤其是在intel机器上,由于Intel的小尾数性质,寄存器中的高,低,左和右将被交换。例如,当使用varbinary(3)时,我们正在谈论的是6个字符的十六进制。在这种情况下,您的位将从右到左配对为以下索引“ 54,32,10”。在英特尔系统中,您会期望“ 76,54,32,10”。由于您仅使用8个中的6个,因此需要记住自己进行交换。“ 76,54”将成为您的左侧,“ 32,10”将成为您的右侧。逗号将您的高低分开。英特尔交换高点和低点,然后交换左和右。因此,要进行转换...例如,您必须自己进行交换,
(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
)))
))
Run Code Online (Sandbox Code Playgroud)
这有点复杂,所以我将尝试保持转换为8个字符的十六进制(varbinary(4))。
总之,这应该可以回答您的问题。全面地。
| 归档时间: |
|
| 查看次数: |
226643 次 |
| 最近记录: |