Penyortiran kolom Oracle Alpha-Numeric
Saya sedang mengerjakan Urutkan kolom Revisi dari tabel Oracle DB dalam urutan asc seperti di bawah ini. Mula-mula revisi numerik akan diurutkan (1,2,3,…). Kemudian Alpha-Numeric akan diurutkan sebagai berikut: A, B, B1, C, C1, C2,…, Y, Y2, Y3, Z, AA, AB, .., DA,… ZZ, dll Row_Number () di pernyataan SELECT diisi dengan 1,2,3… untuk setiap dokumen # (ABC, XYZ) setelah penyortiran revisi.
Lihat gambar yang diupload untuk tabel yang diperlukan.
Saya mencoba dengan SUBSTR, Order by, dll tetapi gagal memilah sesuai persyaratan di atas. Dapatkah seseorang membantu saya dalam hal ini ? Terima kasih!

Jawaban
Karena saya memahami pertanyaan Anda, Anda ingin meletakkan revisi terakhir yang hanya berisi dua karakter dan tanpa digit.
Anda dapat menggunakan pengurutan bersyarat:
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
Ekspresi reguler mendeskripsikan string yang dimulai dengan karakter alfanumerik, secara opsional diikuti dengan digit: revisi ini harus didahulukan. Demo di 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
DOC # | REVISI | RN : --- | : ------- | -: ABC | 1 | 1 ABC | 2 | 2 ABC | 3 | 3 ABC | A | 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
Ada metode lama yang terkenal: rpad (col, max-length, '0')
Misalnya rpad (col, max (length (col)) over (), '0'