この記事を読むのに必要な時間は約 10 分です。
意外と難しいセグメント単位の分割
分解
久しぶりの上級テクニックです!!
SQLサーバーでは取り込まれたテーブルの情報にIPアドレスが存在したとして、セグメント毎に分解を行うのは容易ではありません。
しかし、目的外利用ですがIPアドレスの分解を簡単に行う関数が存在します。
IPアドレスの分解ができれば、あとはセグメント単位に考えるのは容易ですよね
SQL文
こんなデータがあったとして・・・・
SELECT [No]
,[IP]
FROM [test001].[dbo].[ip]

こんな感じで書きます!
SELECT [No] ,[IP] ,PARSENAME(ip,4) as 'seg1' ,PARSENAME(ip,3) as 'seg2' ,PARSENAME(ip,2) as 'seg3' ,PARSENAME(ip,1) as 'seg4' FROM [test001].[dbo].[ip]

ここまで出来たら、あとは料理するのは簡単ですよね♪
サンプル
以下、データサンプルです。
| No | IP | seg1 | seg2 | seg3 | seg4 |
| 1 | 192.168.1.10 | 192 | 168 | 1 | 10 |
| 2 | 192.168.1.11 | 192 | 168 | 1 | 11 |
| 3 | 192.168.1.12 | 192 | 168 | 1 | 12 |
| 4 | 192.168.1.13 | 192 | 168 | 1 | 13 |
| 5 | 192.168.1.14 | 192 | 168 | 1 | 14 |
| 6 | 192.168.1.15 | 192 | 168 | 1 | 15 |
| 7 | 192.168.1.16 | 192 | 168 | 1 | 16 |
| 8 | 192.168.1.17 | 192 | 168 | 1 | 17 |
| 9 | 192.168.1.18 | 192 | 168 | 1 | 18 |
| 10 | 192.168.1.19 | 192 | 168 | 1 | 19 |
| 11 | 192.168.1.20 | 192 | 168 | 1 | 20 |
| 12 | 192.168.1.21 | 192 | 168 | 1 | 21 |
| 13 | 192.168.1.22 | 192 | 168 | 1 | 22 |
| 14 | 192.168.1.23 | 192 | 168 | 1 | 23 |
| 15 | 192.168.1.24 | 192 | 168 | 1 | 24 |
| 16 | 192.168.1.25 | 192 | 168 | 1 | 25 |
| 17 | 192.168.1.26 | 192 | 168 | 1 | 26 |
| 18 | 192.168.1.27 | 192 | 168 | 1 | 27 |
| 19 | 192.168.1.28 | 192 | 168 | 1 | 28 |
| 20 | 192.168.1.29 | 192 | 168 | 1 | 29 |
| 21 | 192.168.1.30 | 192 | 168 | 1 | 30 |
| 22 | 192.168.1.31 | 192 | 168 | 1 | 31 |
| 23 | 192.168.1.32 | 192 | 168 | 1 | 32 |
| 24 | 20.13.5.4 | 20 | 13 | 5 | 4 |
| 25 | 20.13.5.5 | 20 | 13 | 5 | 5 |
| 26 | 20.13.5.6 | 20 | 13 | 5 | 6 |
| 27 | 20.13.5.7 | 20 | 13 | 5 | 7 |
| 28 | 20.13.5.8 | 20 | 13 | 5 | 8 |
| 29 | 20.13.5.9 | 20 | 13 | 5 | 9 |
| 30 | 20.13.5.10 | 20 | 13 | 5 | 10 |
| 31 | 20.13.5.11 | 20 | 13 | 5 | 11 |
| 32 | 20.13.5.12 | 20 | 13 | 5 | 12 |
| 33 | 20.13.5.13 | 20 | 13 | 5 | 13 |
| 34 | 20.13.5.14 | 20 | 13 | 5 | 14 |
| 35 | 20.13.5.15 | 20 | 13 | 5 | 15 |
| 36 | 20.13.5.16 | 20 | 13 | 5 | 16 |
| 37 | 20.13.5.17 | 20 | 13 | 5 | 17 |
| 38 | 183.2.3.1 | 183 | 2 | 3 | 1 |
| 39 | 183.2.3.2 | 183 | 2 | 3 | 2 |
| 40 | 183.2.3.3 | 183 | 2 | 3 | 3 |
| 41 | 183.2.3.4 | 183 | 2 | 3 | 4 |
| 42 | 183.2.3.5 | 183 | 2 | 3 | 5 |
| 43 | 183.2.3.6 | 183 | 2 | 3 | 6 |
| 44 | 183.2.3.7 | 183 | 2 | 3 | 7 |
| 45 | 183.2.3.8 | 183 | 2 | 3 | 8 |
| 46 | 183.2.3.9 | 183 | 2 | 3 | 9 |
| 47 | 183.2.3.10 | 183 | 2 | 3 | 10 |
| 48 | 183.2.3.11 | 183 | 2 | 3 | 11 |
| 49 | 30.30.2.6 | 30 | 30 | 2 | 6 |
| 50 | 30.30.2.7 | 30 | 30 | 2 | 7 |
| 51 | 30.30.2.8 | 30 | 30 | 2 | 8 |
| 52 | 30.30.2.9 | 30 | 30 | 2 | 9 |
| 53 | 30.30.2.10 | 30 | 30 | 2 | 10 |
| 54 | 30.30.2.11 | 30 | 30 | 2 | 11 |
| 55 | 30.30.2.12 | 30 | 30 | 2 | 12 |
| 56 | 30.30.2.13 | 30 | 30 | 2 | 13 |
| 57 | 30.30.2.14 | 30 | 30 | 2 | 14 |
| 58 | 30.30.2.15 | 30 | 30 | 2 | 15 |
| 59 | 30.30.2.16 | 30 | 30 | 2 | 16 |
| 60 | 30.30.2.17 | 30 | 30 | 2 | 17 |
| 61 | 30.30.2.18 | 30 | 30 | 2 | 18 |
| 62 | 30.30.2.19 | 30 | 30 | 2 | 19 |
| 63 | 30.30.2.20 | 30 | 30 | 2 | 20 |
| 64 | 30.30.2.21 | 30 | 30 | 2 | 21 |
| 65 | 30.30.2.22 | 30 | 30 | 2 | 22 |
| 66 | 30.30.2.23 | 30 | 30 | 2 | 23 |
| 67 | 30.30.2.24 | 30 | 30 | 2 | 24 |
| 68 | 56.45.8.98 | 56 | 45 | 8 | 98 |
| 69 | 56.45.8.99 | 56 | 45 | 8 | 99 |
| 70 | 56.45.8.100 | 56 | 45 | 8 | 100 |
| 71 | 56.45.8.101 | 56 | 45 | 8 | 101 |
| 72 | 56.45.8.102 | 56 | 45 | 8 | 102 |
| 73 | 56.45.8.103 | 56 | 45 | 8 | 103 |
| 74 | 56.45.8.104 | 56 | 45 | 8 | 104 |
| 75 | 56.45.8.105 | 56 | 45 | 8 | 105 |
| 76 | 56.45.8.106 | 56 | 45 | 8 | 106 |
| 77 | 56.45.8.107 | 56 | 45 | 8 | 107 |
| 78 | 56.45.8.108 | 56 | 45 | 8 | 108 |
| 79 | 56.45.8.109 | 56 | 45 | 8 | 109 |
| 80 | 56.45.8.110 | 56 | 45 | 8 | 110 |
| 81 | 56.45.8.111 | 56 | 45 | 8 | 111 |
| 82 | 56.45.8.112 | 56 | 45 | 8 | 112 |
| 83 | 56.45.8.113 | 56 | 45 | 8 | 113 |
| 84 | 56.45.8.114 | 56 | 45 | 8 | 114 |
| 85 | 56.45.8.115 | 56 | 45 | 8 | 115 |
| 86 | 56.45.8.116 | 56 | 45 | 8 | 116 |
| 87 | 56.45.8.117 | 56 | 45 | 8 | 117 |
| 88 | 56.45.8.118 | 56 | 45 | 8 | 118 |
| 89 | 56.45.8.119 | 56 | 45 | 8 | 119 |


