На самом деле вы не объяснили, как строки должны превращаться в числа.
Это будет работать для вашего набора данных:
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 |