sql >> データベース >  >> RDS >> Mysql

longintをbashでドット付きクワッドIPに効率的に変換する方法

    Bashを要求したので:

    INET_NTOA() { 
        local IFS=. num quad ip e
        num=$1
        for e in 3 2 1
        do
            (( quad = 256 ** e))
            (( ip[3-e] = num / quad ))
            (( num = num % quad ))
        done
        ip[3]=$num
        echo "${ip[*]}"
    }
    
    INET_ATON ()
    {
        local IFS=. ip num e
        ip=($1)
        for e in 3 2 1
        do
            (( num += ip[3-e] * 256 ** e ))
        done
        (( num += ip[3] ))
        echo "$num"
    }
    

    例:

    $ INET_ATON 10.2.1.255
    167903743
    $ INET_NTOA 167903743
    10.2.1.255
    

    これは、dash、ksh、Bashのいくつかのバージョン、BusyBox ash、zsh(-yを使用)など、私が試したボーン派生シェルのいずれかで動作するバージョンです。 )、さらには Heirloom Bourne Shell

    INET_NTOA() {
        num=$1
        ip=
        for e in 3 2 1
        do
            quad=`echo "256 ^ $e" | bc`
            if [ -n "$ip" ]
            then
                ip=$ip.
            fi
            ip=$ip`echo "$num / $quad" | bc`
            num=`echo "$num % $quad" | bc`
        done
        ip=$ip.$num
        echo "$ip"
    }
    
    INET_ATON ()
    {
        num=0
        e=3
        saveIFS=$IFS
        IFS=.
        set -- $1
        IFS=$saveIFS
        for ip in "[email protected]"
        do
            num=`echo "$num + $ip * 256 ^ $e" | bc`
            e=`echo "$e - 1" | bc`
        done
        echo "$num"
    }
    


    1. MySQLは単語に$を含む正確な単語を検索します

    2. SQL Server(T-SQL)で英国形式で日付を表示する方法

    3. EntityFrameworkがテンポラルテーブルで機能しない

    4. SQLServerでの7日間の移動平均のSQLクエリ