0

として保存されたドット付きクワッドIPv4アドレスを含むテーブルがあるとしますVARCHAR(15)。次に例を示します。

     ipv4
--------------
 172.16.1.100
 172.16.50.5
 172.30.29.28

最後の2つのオクテットをスクラブして、SELECTすべてのフィールドに便利な方法は何ですか。これにより、上記のようになります。"ipv4"

    ipv4
------------
 172.16.x.y
 172.16.x.y
 172.30.x.y

ターゲットRDBMSはpostgresql8.4ですが、移植性が高いほど優れています。

ありがとう。

更新:INET私は滑らかな/CIDR答えに感謝します(そして賛成します)が、最後の2つのオクテットの代わりに数字以外の文字を使用した文字列出力を生成しようとしています。(そして、繰り返しますが、ポータブルであるほど良いです!)

4

3 に答える 3

3

postgresの場合:

select regexp_replace('172.16.1.100', E'(.\\d+){2}$', '.x.y');
于 2010-03-25T16:38:41.750 に答える
3

Postgresのinet型を使用する場合は、inet演算子を使用してこれを行うことができます。<<='が'内に含まれていることを意味します。私は次のような何かがあなたが必要とすることをするだろうと思う:

select my_ipaddress & inet '255.255.0.0' from my_ip_table;

マニュアルリファレンス:http ://www.postgresql.org/docs/8.4/static/functions-net.html

于 2010-03-25T16:47:06.593 に答える
1

従来は、列タイプをinet/cidrに変換します

編集:このネイティブデータ型には、文字列操作よりもはるかに優れたパフォーマンスを発揮する特定の関数がかなりあります。

于 2010-03-25T16:39:49.253 に答える