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轉成整數後排序: