首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在MySQL中将二进制转换为十进制(39,0)?

如何在MySQL中将二进制转换为十进制(39,0)?
EN

Stack Overflow用户
提问于 2016-03-21 09:00:09
回答 1查看 870关注 0票数 2

我使用十进制(39,0)无符号格式存储ipv6地址。

我需要查询数据库。我使用INET6_ATON(),它将ipv6转换为二进制。现在我需要将二进制转换为十进制(39,0)。

这在纯MySQL中是可能的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-21 10:02:00

是的,有可能。由于DECIMAL表示的IPv6大于最大64位整数(18,446,744,073,709,551,615),所以必须将“string”拆分到16个字符,然后将它们连接在一起:

示例表:

代码语言:javascript
复制
mysql> select * from ip_table;
+----+-----------------------------------------+
| id | ipv6                                    |
+----+-----------------------------------------+
|  1 | 2001:db8:a0b:12f0::1                    |
|  2 | 3731:54:65fe:2::a7                      |
|  3 | FE80:0000:0000:0000:0202:B3FF:FE1E:8329 |
|  4 | FE80::0202:B3FF:FE1E:8329               |
+----+-----------------------------------------+
4 rows in set

SQL语句:

代码语言:javascript
复制
select id,
(
cast(conv(substr(HEX(INET6_ATON(t.`ipv6`)), 1, 16), 16, 10) as decimal(65))*18446744073709551616 +
cast(conv(substr(HEX(INET6_ATON(t.`ipv6`)), 17, 16), 16, 10) as decimal(65)) 
) as converted
from ip_table t

结果:

代码语言:javascript
复制
+----+-----------------------------------------+
| id | converted                               |
+----+-----------------------------------------+
|  1 | 42540766414390830568948465903729639425  |
|  2 | 73361969000969283948743196392239923367  |
|  3 | 338288524927261089654163772891438416681 |
|  4 | 338288524927261089654163772891438416681 |
+----+-----------------------------------------+
4 rows in set

注意,最后两个is是相同的,为了测试脚本是否正常工作,我将它们放在不同的格式中。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36126640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档