請教一個oracle排序的問題,現有一個order欄位為varchar型別,其資料格式為:
1
2.1
2.1.2
5.1
10
10.1
20
默認的order只是安裝字串的格式進行排序
1
10
10.1
20
2.1
2.1.2
5.1
希望能夠按照數字的大小進行排序,不知有沒有一種簡單的方法
uj5u.com熱心網友回復:
SQL>
SQL> create table test(id varchar(30));
Table created
SQL> begin
2 insert into test values('1');
3 insert into test values('2.1');
4 insert into test values('2.1.2');
5 insert into test values('2.1.1');
6 insert into test values('5.1');
7 insert into test values('10');
8 insert into test values('10.1');
9 insert into test values('20');
10 end;
11 /
PL/SQL procedure successfully completed
SQL> select id
2 from test t
3 order by
4 0 + nvl(regexp_substr(id,'[^.]+',1,1),0),
5 0 + nvl(regexp_substr(id,'[^.]+',1,2),0),
6 0 + nvl(regexp_substr(id,'[^.]+',1,3),0),
7 0 + nvl(regexp_substr(id,'[^.]+',1,4),0)
8 ;
ID
------------------------------
1
2.1
2.1.1
2.1.2
5.1
10
10.1
20
8 rows selected
SQL> drop table test purge;
Table dropped
SQL>
uj5u.com熱心網友回復:
轉換成數字型進行排序uj5u.com熱心網友回復:
借用版主的資料SQL> select t.id from test t order by to_number(regexp_replace(t.id,'\.','',1,2));
ID
------------------------------
1
2.1
2.1.1
2.1.2
5.1
10
10.1
20
uj5u.com熱心網友回復:
謝謝大家的回答, 思路感覺就是將小數點截取 并在前面加0轉換成數字 然后在進行排序uj5u.com熱心網友回復:
就是這個思路。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/110535.html
標籤:開發
