功能:实现IP地址排序
思路:IP地址以点号分隔,直接排序会出现顺序混乱:
如:
10.143.19.138
192.168.1.1
如此两个IP地址是无法排序的(很明显)
将其转换成:
010.143.019.138
192.168.001.001
就可以进行排序了……
代码:
select
t.icf_path icf_path_o,lpad(substr(t.icf_path,
0
,InStr(t.icf_path,
'
.
'
,
1
,
1
)),
4
,
'
0
'
)
||
lpad(substr(t.icf_path,InStr(t.icf_path,
'
.
'
,
1
,
1
)
+
1
,InStr(t.icf_path,
'
.
'
,
1
,
2
)
-
InStr(t.icf_path,
'
.
'
,
1
,
1
)),
4
,
'
0
'
)
||
lpad(substr(t.icf_path,InStr(t.icf_path,
'
.
'
,
1
,
2
)
+
1
,InStr(t.icf_path,
'
.
'
,
1
,
3
)
-
InStr(t.icf_path,
'
.
'
,
1
,
2
)),
4
,
'
0
'
)
||
lpad(substr(t.icf_path,InStr(t.icf_path,
'
.
'
,
1
,
3
)
+
1
),
3
,
'
0
'
) icf_path_sort
from
mat_ipconfig t
order
by
icf_path
asc
结果:
icf_path_o icf_path_sort
1
10.143
.
15.1
010.143
.
015.001
2
10.143
.
15.10
010.143
.
015.010
3
10.143
.
15.100
010.143
.
015.100
4
10.143
.
15.101
010.143
.
015.101
5
10.143
.
15.102
010.143
.
015.102
6
10.143
.
15.103
010.143
.
015.103
7
10.143
.
15.104
010.143
.
015.104
8
10.143
.
15.105
010.143
.
015.105
9
10.143
.
15.106
010.143
.
015.106
10
10.143
.
15.107
010.143
.
015.107
11
10.143
.
15.108
010.143
.
015.108
12
10.143
.
15.109
010.143
.
015.109
13
10.143
.
15.11
010.143
.
015.011
14
10.143
.
15.110
010.143
.
015.110
15
10.143
.
15.111
010.143
.
015.111
16
10.143
.
15.112
010.143
.
015.112
17
10.143
.
15.113
010.143
.
015.113
18
10.143
.
15.114
010.143
.
015.114
19
10.143
.
15.115
010.143
.
015.115
20
10.143
.
15.116
010.143
.
015.116
21
10.143
.
15.117
010.143
.
015.117
22
10.143
.
15.118
010.143
.
015.118