public long ipToLong(String ipAddress) {
long result = 0;
String[] ipAddressInArray = ipAddress.split("\\.");
for (int i = 3; i >= 0; i--) {
long ip = Long.parseLong(ipAddressInArray[3 - i]);
result |= ip << (i * 8);
}
return result;
}
public String longToIp(long ip) {
StringBuilder sb = new StringBuilder(15);
for (int i = 0; i < 4; i++) {
sb.insert(0, Long.toString(ip & 0xff));
if (i < 3) {
sb.insert(0, '.');
}
ip = ip >> 8;
}
return sb.toString();
}
Postgres本来就有IP类型,设计的时候就应该用上作为字段类型
Anyway,既然你提到了这个问题,那就把它转化为IP类型再排序即可
转成整数后排序。另外建议对于IP这种字段,直接在数据库里面存整数而不是字符串
给你个转换的例子:
可以先将Ip地址转为int类型,再存入数据库。或者数据库中的字符串取到Java中转成Long再比较。
Ip地址又四个0-255组成,每个部分1Byte,四个部分刚好4Byte,也就是一个Integer。
shell 就可以排序:
在vim中排序:
最后给你个python版的:你用java照着改:
转成int再来排序吧
思路:order by每个字段
思路是把IP转成整数后排序: