この記事を読むのに必要な時間は約 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 |