MySQLでvarcharカラムのIPアドレスを整数に変換・コピーする方法【INET_ATON()】
INET_ATON()関数とは
varchar型のカラムに保存されたIPアドレスを、同じテーブル内で整数値に変換したい場合は、MySQLのINET_ATON()関数を使用します。この関数は、ドット区切り(例:「192.168.120.0」)のIPアドレス文字列を32ビットの数値に変換します。IPアドレスを整数として扱うことで、保存サイズの節約や、範囲条件での検索効率の向上といったメリットが得られます。
ステップ1:サンプルテーブルの作成
まず、IPアドレスをvarchar型で保存するテーブルを作成しましょう。
mysql> create table DemoTable1404
-> (
-> IpAddress varchar(40)
-> );
Query OK, 0 rows affected (1.02 sec)ステップ2:レコードの挿入
INSERT文でテーブルにいくつかのIPアドレスを登録します。
mysql> insert into DemoTable1404 values('192.168.120.0');
Query OK, 1 row affected (0.43 sec)
mysql> insert into DemoTable1404 values('192.168.120.20');
Query OK, 1 row affected (0.60 sec)
mysql> insert into DemoTable1404 values('224.0.0.0');
Query OK, 1 row affected (0.42 sec)ステップ3:登録内容の確認
SELECT文ですべてのレコードを表示して確認します。
mysql> select * from DemoTable1404;
次のような出力が得られます。
+----------------+ | IpAddress | +----------------+ | 192.168.120.0 | | 192.168.120.20 | | 224.0.0.0 | +----------------+ 3 rows in set (0.00 sec)
varcharから整数へIPアドレスを変換するクエリ
varcharカラムのIPアドレスを整数に変換するには、SELECT文でINET_ATON()関数を呼び出すだけです。
mysql> select inet_aton(IpAddress) from DemoTable1404;
実行結果は以下のとおりです。
+----------------------+ | inet_aton(IpAddress) | +----------------------+ | 3232266240 | | 3232266260 | | 3758096384 | +----------------------+ 3 rows in set (0.00 sec)
それぞれ「192.168.120.0 → 3232266240」「192.168.120.20 → 3232266260」「224.0.0.0 → 3758096384」という整数値に変換されていることがわかります。
INET_NTOA()で変換結果を検証する
正しく変換できたかどうかを確認するには、逆変換を行うINET_NTOA()関数を使います。この関数は、整数値を元のドット区切りのIPアドレス形式に復元できます。
mysql> select inet_ntoa('3232266240');実行結果:
+-------------------------+
| inet_ntoa('3232266240') |
+-------------------------+
| 192.168.120.0 |
+-------------------------+
1 row in set (0.27 sec)「3232266240」が元の「192.168.120.0」に復元されたため、変換が正しく行われたことが証明されました。
補足:テーブルのデータを実際に整数として更新する方法
ここまでの例ではSELECT文で変換結果を表示しただけですが、実際にテーブル内のデータを整数としてコピーしたい場合は、まず整数用のカラムを追加し、その後UPDATE文でINET_ATON()の結果を書き込みます。
mysql> ALTER TABLE DemoTable1404 ADD COLUMN IpAddressInt INT UNSIGNED; mysql> UPDATE DemoTable1404 SET IpAddressInt = INET_ATON(IpAddress);
IPv4アドレスの最大値「255.255.255.255」は「4294967295」に相当するため、格納先のカラムにはUNSIGNED INT型(符号なし整数)を使用するのが安全です。通常のINT型では最大値が2147483647のため、一部のIPアドレスが収まらない点に注意してください。
-
MySQLでVARCHAR型のカラムをNULL許容に変更する方法
MySQLでは、テーブルのカラム定義を後から変更できます。既存のVARCHAR型カラムをNULL値を許容する設定に変更したい場合は、ALTER TABLE文とCHANGE句を組み合わせて使用します。基本構文カラムをNULL許容に変更するには、以下の構文を使用します。ALTER TABLE テーブル名 CHANGE 変更前カラム名 変更後カラム名 データ型 NULL DEFAULT NULL;ポイントは、CHANGE句の後に「現在のカラム名」と「新しいカラム名」の両方を指定する必要がある点です。カラム名を変えない場合でも、同じ名前を2回記述します。また、データ型も改めて指定する必要があります。実
-
MySQLでテーブルの重複を除いたレコードから平均値を取得するクエリの書き方
MySQLで平均値を求めるには AVG() 関数を使用します。さらに DISTINCT と組み合わせることで、重複しているレコードを除外した状態で平均を計算することができます。この記事では、実際にサンプルテーブルを作成しながら、個別(ユニーク)なレコードから平均値を取得する方法を解説します。サンプルテーブルの作成まず、以下のクエリでテーブルを作成します。mysql> create table DemoTable1934 ( StudentName varchar(20), StudentMarks int ); Query OK, 0 rows affec