我正试图将HEX
值(ipv6地址,扩展)转换为SQL Server 2019上的BIGINT
值。
- 输入为:
2a0085c0000100000000000002410023
- 期望输出:
55830288595252163998698714105846497315
尝试了几乎所有被标记为"工作"的解决方案,例如:
select
convert(bigint, convert(varbinary, '2a0085c0000100000000000002410023', 2))
,但无济于事。该输出中前面的查询结果:37814307
任何帮助将非常感激!
bigint
太小(64位),不适合IPv6地址(128位)。
你可以得到这样的两半:
SELECT
high = CAST(SUBSTRING(ipv6Val, 1, 8) AS bigint),
low = CAST(SUBSTRING(ipv6Val, 9, 8) AS bigint)
这个<<p> strong>假定varbinary/binary
值实际上是16字节的确切长度。
基于注释编辑
IPv6通常表示为hexnotdecimal,这将得到文本:SELECT CONVERT(varchar(32), ipv6Val, 2)
在T-SQL中转换为十进制是非常困难的,就像在大多数语言中一样,我想问你为什么需要它,因为IPv6从来没有这样使用过。