假設你的字符串的結構在你的榜樣固定, ,這可能是一種方式:
SQL> select x,
2 to_number(regexp_substr(x, '[0-9]+')) numericPart,
3 regexp_substr(x, '([0-9]+)([A-Z])', 1, 1, '', 2) optionalChar
4 from (
5 select 'Section1' x from dual union all
6 select 'Section2' from dual union all
7 select 'Section3' from dual union all
8 select 'Section10' from dual union all
9 select 'Section11' from dual union all
10 select 'Section1A' from dual union all
11 select 'Section1B' from dual union all
12 select 'Section12' from dual union all
13 select 'Section11A' from dual union all
14 select 'Section11B' from dual
15 )
16 order by numericPart,
17 optionalChar nulls first
18 ;
X NUMERICPART OPTIONALCHAR
---------- ----------- ----------------------------------------
Section1 1
Section1A 1 A
Section1B 1 B
Section2 2
Section3 3
Section10 10
Section11 11
Section11A 11 A
Section11B 11 B
Section12 12
這裏您首先按數字部分進行排序,將其視爲數字,然後考慮數字後面的(可選)字符。
也許這可以幫助你:http://stackoverflow.com/questions/40342049/how-to-use-order-by-in-alphanumeric-column-in-oracle?noredirect=1&lq=1 –
你試過了嗎?什麼? – Aleksej
我試過查詢:選擇section_name從部分按長度排序(section_name),section_name –