思路: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
|| 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
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