簡體   English   中英

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

[英]How to sort alphanumeric String in 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

假設您的字符串結構是固定的,如您的示例中所示,這可能是一種方式:

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

在這里,您首先按數字部分排序,將其視為數字,然后考慮數字后面的(可選)字符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM