Сортировка строки и комбинации чисел по убыванию в оральном порядке - PullRequest
1 голос
/ 29 мая 2020

Я пытаюсь отсортировать комбинацию строки и числа в порядке убывания.

Ввод:

P9S1
P7S1
P13S1
P12S2
P10S1

Ожидаемый результат:

P13S1
P12S2
P10S1
P9S1
P7S1

Вот что Я попробовал

Пример кода:

  with
      inputs (firmware) as (
        select 'P9S1'  from dual union all
        select 'P7S1' from dual union all
        select 'P13S1' from dual union all
        select 'P12S2' from dual union all
        select 'P10S1'      from dual
      )
    select firmware
    from   inputs
    order by 
    regexp_replace(firmware, '\d+\.\d+') desc ;

Но это не работает должным образом. Любая помощь будет принята с благодарностью.

Спасибо

1 Ответ

1 голос
/ 29 мая 2020

На самом деле вы не объяснили, как строки должны превращаться в числа.

Это будет работать для вашего набора данных:

order by to_number(regexp_replace(firmware, '\D', '')) desc 

Идея состоит в том, чтобы удалить все нецифровые символы из строка, превратите полученную строку в число и используйте его для сортировки.

with inputs (firmware) as (
    select 'P9S1' from dual union all
    select 'P7S1' from dual union all
    select 'P13S1' from dual union all
    select 'P12S2' from dual union all
    select 'P10S1' from dual
)
select firmware
from   inputs
order by to_number(regexp_replace(firmware, '\D', '')) desc ;
| FIRMWARE |
| :------- |
| P13S1    |
| P12S2    |
| P10S1    |
| P9S1     |
| P7S1     |
...