2017-02-13 132 views
2

輸入是:如何在oracle中對字母數字字符串進行排序?

Section1 
Section2 
Section3 
Section10 
Section11 
Section1A 
Section1B 
Section12 
Section11A 
Section11B 

我希望輸出這樣的:

Section1 
Section1A 
Section1B 
Section2 
Section3 
Section10 
Section11 
Section11A 
Section11B 
Section12 

我試着查詢:

select section_name 
from sections 
order by length(section_name),section_name 
+0

也許這可以幫助你:http://stackoverflow.com/questions/40342049/how-to-use-order-by-in-alphanumeric-column-in-oracle?noredirect=1&lq=1 –

+0

你試過了嗎?什麼? – Aleksej

+0

我試過查詢:選擇section_name從部分按長度排序(section_name),section_name –

回答

2

假設你的字符串的結構在你的榜樣固定, ,這可能是一種方式:

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 

這裏您首先按數字部分進行排序,將其視爲數字,然後考慮數字後面的(可選)字符。

相關問題