Порядок Oracle по цифрам и буквам, например: 1, 1a, 1b, 2, 2c - PullRequest
1 голос
/ 29 апреля 2019

У меня есть эти данные:

1
10
100
101
102
12
120
1a
1b
1c
2
3
4

и я бы хотел заказать вот так:

1
1a
1b
1c
2
3
4
10
12
100
101
102
120

Это возможно в Oracle?

Я пробовал это, но он не работает с буквенными символами

order by case when replace(translate(trim(COLUMN),'0123456789','0'),'0','') is null then to_number(COLUMN) end asc, COLUMN asc

1 Ответ

0 голосов
/ 29 апреля 2019

Если вы не возражаете против незначительного снижения производительности, регулярное выражение является простым решением.

-- sample data
with t as (select '1' as x from dual
            union select '10' from dual
            union select '100' from dual
            union select '101' from dual
            union select '102' from dual
            union select '12' from dual
            union select '120' from dual
            union select '1a' from dual
            union select '1b' from dual
            union select '1c' from dual
            union select '2' from dual
            union select '3' from dual
            union select '4' from dual)
-- query
select x
from t
-- order first by the leading numbers, then alphabetically
order by to_number(regexp_substr(x, '[0-9]*')), x;
...