2016-10-18 4 views
0

мне нужно отсортировать следующий список значений, точки включали:Oracle 10g - Сортировка чисел с буквами

 
1. 
10. 
2f. 
2c. 
2a. 

Мне нужно их отсортированы в следующем порядке:

 
1. 
2a. 
2c. 
2f. 
10. 

Я использовал следующие код на SQL Developer для сортировки списка:

 
with testdata as 
(
select column_value from table (sys.odcivarchar2list 
    ('1. ' 
    ,'10. ' 
    ,'2f. ' 
    ,'2b. ' 
    ,'2a. ')) 
    ) 
select column_value 
    from testdata 
order by case when replace(translate(trim(column_value),'','0'),'0','') is null then to_number(column_value) end 
     ,column_value 
/

, но я не получил результат я хотел:

 
1. 
10. 
2a. 
2c. 
2f. 

Заранее благодарю вас за помощь.

ответ

2

Вы можете использовать regexp_substr для заказа по номерам в строке сначала, а затем остальным нечисловым символам. Это предполагает, что в строке всегда есть число (число), за которым следует нечисловой символ (символы).

select column_value 
from testdata 
order by cast(regexp_substr(column_value,'[0-9]+') as int), 
regexp_substr(column_value,'[^0-9]+') 
+0

[Дополнительная информация] (https://www.techonthenet.com/oracle/functions/regexp_substr.php) для контекста – JohnHC