Если префикс всегда имеет длину 10 символов, вы можете выделить его с помощью substring
и преобразовать второй блок в число с помощью cast
:
select invoiceno
from invoice
where invoiceno like '1234/45/67%'
order by substring(invoiceno from 1 for 10),
cast(substring(invoiceno from 11) as decimal);
Приведение второй части к числу приводит к тому, что они сортируются как числа, а не строки, так что -10
идет перед -1
, а не наоборот.Если вы всегда будете использовать префикс формы 9999/99/99
в предложении WHERE, вы можете упростить ORDER BY:
select invoiceno
from invoice
where invoiceno like '1234/45/67%'
order by cast(substring(invoiceno from 11) as decimal);