MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLのINET_ATON()関数とORDER BYでIPアドレスを正しく並べ替える方法

MySQLでIPアドレス形式のレコードを正しい順序で並べ替えたい場合は、INET_ATON() 関数を使用します。この関数を使うと、文字列として保存されたIPアドレスを数値に変換できるため、その結果に対して ORDER BY を適用することで、人間が直感的に理解できる自然な順序(昇順・降順)でレコードをソートできます。

1. テーブルの作成

まず、サンプル用のテーブルを作成します。

mysql> create table DemoTable
-> (
-> IpAddress varchar(50)
-> );
Query OK, 0 rows affected (1.36 sec)

2. レコードの挿入

INSERTコマンドを使って、テーブルにいくつかのIPアドレスを登録します。

mysql> insert into DemoTable values('192.168.110.78');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values('192.168.110.87');
Query OK, 1 row affected (0.27 sec)
mysql> insert into DemoTable values('192.168.110.75');
Query OK, 1 row affected (0.26 sec)

3. 登録データの確認

SELECT文ですべてのレコードを表示してみましょう。

mysql> select *from DemoTable;

実行すると、次のような結果が得られます。

+----------------+
| IpAddress |
+----------------+
| 192.168.110.78 |
| 192.168.110.87 |
| 192.168.110.75 |
+----------------+
3 rows in set (0.00 sec)

このように、通常の状態では挿入した順序のまま表示され、IPアドレスとしての大小関係は反映されていません。

4. INET_ATON()を使った並べ替え

ここで、INET_ATON()関数を組み合わせたORDER BY句を使用して、IPアドレスの昇順に並べ替えます。

mysql> select *from DemoTable
-> order by inet_aton(IpAddress);

実行結果は以下の通りです。

+----------------+
| IpAddress |
+----------------+
| 192.168.110.75 |
| 192.168.110.78 |
| 192.168.110.87 |
+----------------+
3 rows in set (0.00 sec)

ポイント解説

IPアドレスを単純に文字列としてORDER BYすると、「192.168.110.10」が「192.168.110.9」より前に来るなど、意図しない順序になることがあります。これは文字列比較では先頭から1文字ずつ評価されるためです。INET_ATON()は「192.168.110.75」のようなドット区切りのアドレスを32ビット整数に変換するため、数値として正確な比較が可能になります。降順にしたい場合は、末尾に DESC を付けるだけで対応できます。

  1. MySQLでレコードを挿入しながら日付をフォーマットする方法(DATE_FORMAT活用)

    MySQLでは、INSERT文の中でDATE_FORMAT()関数を使うことで、レコードを挿入する際に日付を任意の形式に整形できます。本記事では、実際にテーブルを作成し、日付をフォーマットしながらデータを挿入する手順を具体的なSQL例とともに解説します。1. テーブルの作成まず、フォーマット済みの日付文字列を格納するためのテーブルを作成します。ここでは、VARCHAR型のカラム「ShippingDate」を持つシンプルなテーブルを用意します。mysql> create table DemoTable2012 -> ( -> ShippingDate varch

  2. MySQLでASC順にレコードのリストのみを表示する方法

    MySQLでレコードを特定の順序で表示したい場合、条件を設定した上でORDER BY句を使用する必要があります。このようなケースでは、ORDER BY CASEステートメントが非常に便利です。本記事では、特定のレコードを優先的に並べ替えつつ、残りのレコードを昇順(ASC)で表示する方法を解説します。テーブルの作成まず、サンプル用のテーブルを作成しましょう。mysql> create table DemoTable2039 -> ( -> Name varchar(20) -> );Query OK, 0 rows affected (0.62 sec)