第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

字符串型IP地址從小到大排序

字符串型IP地址從小到大排序

30秒到達(dá)戰(zhàn)場 2019-03-06 14:15:56
數(shù)據(jù)庫有IP一列,我想取出時按從小到大排列,但因為是字符串型,排列結(jié)果變成了x.x.x.1x.x.x.10x.x.x.11x.x.x.2.....有沒有辦法讓字符串像數(shù)字一樣從小到大排列?或者取出后在java中有什么辦法?
查看完整描述

7 回答

?
楊__羊羊

TA貢獻(xiàn)1943條經(jīng)驗 獲得超7個贊

Postgres本來就有IP類型,設(shè)計的時候就應(yīng)該用上作為字段類型

Anyway,既然你提到了這個問題,那就把它轉(zhuǎn)化為IP類型再排序即可

order by cast(ip as inet)


查看完整回答
反對 回復(fù) 2019-04-24
?
紅顏莎娜

TA貢獻(xiàn)1842條經(jīng)驗 獲得超13個贊

轉(zhuǎn)成整數(shù)后排序。另外建議對于IP這種字段,直接在數(shù)據(jù)庫里面存整數(shù)而不是字符串


給你個轉(zhuǎn)換的例子:


    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();

    }


查看完整回答
反對 回復(fù) 2019-04-24
?
繁華開滿天機(jī)

TA貢獻(xiàn)1816條經(jīng)驗 獲得超4個贊

可以先將Ip地址轉(zhuǎn)為int類型,再存入數(shù)據(jù)庫?;蛘邤?shù)據(jù)庫中的字符串取到Java中轉(zhuǎn)成Long再比較。

Ip地址又四個0-255組成,每個部分1Byte,四個部分剛好4Byte,也就是一個Integer。


查看完整回答
反對 回復(fù) 2019-04-24
?
holdtom

TA貢獻(xiàn)1805條經(jīng)驗 獲得超10個贊

思路:order by每個字段


order by to_number(substr(ip, 1, instr(ip,'.',1,1)-1)),

  to_number(substr(ip,instr(ip, '.',1,1)+1,instr(ip, '.',1,2)-instr(ip, '.',1,1)-1)),

  to_number(substr(ip,instr(ip, '.',1,2)+1,instr(ip, '.',1,3)-instr(ip, '.',1,2)-1)),

  to_number(substr(ip,instr(ip, '.',1,3)+1,length(ip)-instr(ip, '.',1,3)));


查看完整回答
反對 回復(fù) 2019-04-24
?
一只名叫tom的貓

TA貢獻(xiàn)1906條經(jīng)驗 獲得超3個贊

思路是把IP轉(zhuǎn)成整數(shù)后排序:


<?php

$ip = array('127.0.0.3','127.0.0.1','127.0.0.2');

foreach($ip as $k => $v) {

    $ip[$k] = ip2long($v);

}

sort($ip);

var_export($ip);

foreach($ip as $k => $v) {

    echo long2ip($v)."\n";

}

//輸出

array (

  0 => 2130706433,

  1 => 2130706434,

  2 => 2130706435,

)

127.0.0.1

127.0.0.2

127.0.0.3


查看完整回答
反對 回復(fù) 2019-04-24
  • 7 回答
  • 0 關(guān)注
  • 928 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號