【PostgreSQL】IPアドレス形式データでソートする

今回は、「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アドレス形式データをソートする方法を紹介しました。