Oracle 영숫자 열 정렬
Aug 19 2020
Oracle DB 테이블의 개정 열을 아래에 따라 asc 순서로 정렬하기 위해 노력하고 있습니다. 처음에는 정렬 할 숫자 개정 (1,2,3,…). 그 후 A, B, B1, C, C1, C2,…, Y, Y2, Y3, Z, AA, AB, .., DA,… ZZ 등으로 정렬 될 영숫자. Row_Number () in 개정 정렬 후 각 문서 번호 (ABC, XYZ)에 대해 1,2,3…으로 채워질 SELECT 문.
필요한 테이블은 업로드 된 이미지를 참조하십시오.
SUBSTR, Order by 등으로 시도했지만 위의 요구 사항에 따라 정렬하지 못했습니다. 누군가 나를 도울 수 있습니까? 감사!

답변
1 GMB Aug 19 2020 at 05:00
귀하의 질문을 이해 했으므로 두 문자 만 포함하고 숫자가없는 마지막 개정판을 작성하려고합니다.
조건부 정렬을 사용할 수 있습니다.
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
DOC # | 개정 | RN : --- | : ------- | -: ABC | 1 | 1 ABC | 2 | 2 ABC | 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
SayanMalakshinov Aug 19 2020 at 05:18
잘 알려진 오래된 방법이 있습니다 : rpad (col, max-length, '0')
예 : rpad (col, max (length (col)) over (), '0'