今回は、「PostgreSQL」にIPアドレス形式データで登録されている項目をソートする方法を紹介していきます。
検証環境
検証に使用した環境/ライブラリを次に記載します。
- PostgreSQL(サーバ)
- バージョン:12.4
事前準備
検証するためのテーブル作成とデータ登録を実施します。
【テーブル作成】
テーブル作成のSQL文は、次のようになります。IPアドレス形式で登録するカラムは、文字列データ型を指定しています。
create table ip (
ip text
);
【データ登録】
データ登録のSQL文は、次のようになります。
insert into ip values ('192.168.1.1');
insert into ip values ('192.168.10.1');
insert into ip values ('192.168.2.1');
insert into ip values ('192.168.20.1');
ソート方法
取得できない方法
IPアドレス形式データのカラムをソート条件に指定して取得してみます。SQL文の例は、次のようになります。
【SQL文】
select * from ip order by ip;
SQL文の実行結果の例は、次のようになります。IPアドレス形式データでソートして取得できていないように見えます。
【実行結果】
192.168.1.1
192.168.10.1
192.168.2.1
192.168.20.1
期待した結果は、次のようになることが考えられます。
【期待した実行結果】
192.168.1.1
192.168.2.1
192.168.10.1
192.168.20.1
取得できる方法
IPアドレス形式のデータのカラムをソート条件に指定して取得する場合は、「inet型」にキャストすることで取得できるようになります。SQL文の例は、次のようになります。
【SQL文】
select ip::inet from ip order by ip;
-- または
select * from ip order by ip::inet
SQL文の実行結果の例は、次のようになります。IPアドレス形式のデータでソートして取得できています。
【実行結果】
192.168.1.1
192.168.2.1
192.168.10.1
192.168.20.1
「inet型」については、次のサイトで詳細を確認することもできます。
8.9. ネットワークアドレス型
まとめ
「PostgreSQL」でIPアドレス形式データをソートする方法を紹介しました。