我在MySQL中有一个表,其中的一列包含IP地址-存储为'VARCHAR(40)'。 ipv4和ipv6地址都被使用。
现在,我想对那些地址进行排序,但是我希望所有ipv4地址都在所有ipv6地址之前。我试过了:
ORDER BY INET6_ATON(IpAddress)
,其中IpAddress
是列的名称。 INET6_ATON
返回“ VARBINARY(16)”。
对此进行排序将得到如下结果:
35.229.251.134
2405:204:900e:e66c::1441:48a1
37.9.113.28
其中ipv4和ipv6混合在一起。这当然是因为24(十六进制)是36(十进制),介于35和37之间。]
我如何对ip地址进行排序,所以ipv4总是排在ipv6之前?
我在MySQL中有一个表,其中的一列包含IP地址-存储为'VARCHAR(40)'。 ipv4和ipv6地址都被使用。现在我想对那些地址进行排序,但是我希望所有的ipv4地址都可以......>
您可以寻找.
,然后放在第一位:
order by (ipaddress not like '%:%') desc, -- ipv4 desc
INET6_ATON(IpAddress)