Алфавитно-цифровая сортировка столбцов Oracle
Я работаю над сортировкой столбца Revision таблицы Oracle DB в порядке возрастания, как показано ниже. Сначала нужно отсортировать числовые ревизии (1,2,3,…). После этого алфавитно-цифровые символы будут отсортированы следующим образом: A, B, B1, C, C1, C2,…, Y, Y2, Y3, Z, AA, AB, .., DA,… ZZ и т. Д. Row_Number () в оператор SELECT должен быть заполнен 1,2,3… для каждого номера документа (ABC, XYZ) после сортировки ревизий.
См. Загруженное изображение для необходимой таблицы.
Я пробовал использовать SUBSTR, Order by и т. Д., Но не смог разобраться в соответствии с вышеуказанным требованием. Может ли кто-нибудь помочь мне в этом? Спасибо!

Ответы
Насколько я понимаю ваш вопрос, вы хотите поместить последние версии, содержащие только два символа и без цифр.
Вы можете использовать условную сортировку:
select
t.*,
row_number() over(
partition by doc#
order by
case when regexp_like(revision, '^\w\d?$') then 0 else 1 end,
revision
) rn
from t
order by doc#, rn
Регулярное выражение описывает строку, начинающуюся с буквенно-цифрового символа, за которой может следовать цифра: эти версии должны быть первыми. Демо на DB Fiddle :
with t as (
select 'ABC' doc#, '1' revision from dual
union all select 'ABC', '2' from dual
union all select 'ABC', '3' from dual
union all select 'ABC', 'A' from dual
union all select 'ABC', 'B' from dual
union all select 'ABC', 'B1' from dual
union all select 'ABC', 'C' from dual
union all select 'ABC', 'C1' from dual
union all select 'ABC', 'D' from dual
union all select 'ABC', 'AA' from dual
union all select 'ABC', 'AB' from dual
union all select 'ABC', 'BA' from dual
union all select 'ABC', 'DA' from dual
)
select
t.*,
row_number() over(
partition by doc#
order by
case when regexp_like(revision, '^\w\d?$') then 0 else 1 end,
revision
) rn
from t
order by doc#, rn
ДОК № | ПЕРЕСМОТР | RN : --- | : ------- | -: ABC | 1 | 1 ABC | 2 | 2 ABC | 3 | 3 ABC | А | 4 ABC | B | 5 ABC | B1 | 6 ABC | C | 7 ABC | C1 | 8 ABC | D | 9 ABC | AA | 10 ABC | AB | 11 ABC | BA | 12 ABC | DA | 13
Хорошо известен старый метод: rpad (col, max-length, '0')
Например, rpad (col, max (length (col)) over (), '0'