Похоже, что вы хотите сделать, это составная сортировка - вы хотите сортировать алфавитные символы по алфавиту, но вы хотите, чтобы числовые символы были сгруппированы вместе и рассматривались как числа.
select x
FROM (
select '144' x from dual union all
select '211' x from dual union all
select '211B' x from dual union all
select '207AB' x from dual union all
select '213OUTD' x from dual union all
select '1111111111231' x from dual union all
select 'OUTDR1004' x from dual union all
select 'CXL10570' x from dual union all
select 'OUTDR904' x from dual
) order by case
-- starts with number, pad number part with zeros to sort numerically
when regexp_like(x,'^[[:digit:]]') then lpad(regexp_substr(x, '^[[:digit:]]+'),50,'0')
-- if x starts with non-numeric, primary sort the alpha portion
when regexp_like(x, '^[^[:digit:]]') then regexp_substr(x, '^[^[:digit:]]+')
else x end,
-- if x starts with a non-numeric, secondary sort by the numeric portion (zero padded)
case when regexp_like(x, '^[^[:digit:]]') then lpad(regexp_substr(x, '[[:digit:]]+$'),50,'0')
-- if x starts with a numeric, secondary sort by the alpha portion
when regexp_like(x, '^[[:digit:]]') then regexp_substr(x, '[^[:digit:]]+$')
else x end nulls first;
Надеюсь, у вас есть только те случаи, которые вы здесь показали, и нет таких случаев, как 302OUTDR378
, иначе эта логика сортировки быстро станет неуправляемой.
Редактировать: обновлено, чтобы перестать включать альфа-часть в дополнение к нулю.
Редактировать 2: обновлено, чтобы добавить 'null first' во вторичную сортировку.