У меня есть таблица со следующим набором данных
ID (VARCHAR2 field) D001 D002 D010 D0012
Я использую max() в этом поле.
max()
Select max(ID) from <table-name>;
Возвращает D010 как результат.
D010
Почему результат не D0012?
D0012
Вы получаете D010, потому что в алфавитном порядке D010 идет после D0012 или, иначе говоря, D01 идет после D00, и поэтому все, что D01x, идет после того, что начинается D00x.
D01
D00
D01x
D00x
код ниже работает для меня, как вы ожидаете
select max(to_number(regexp_substr(id, '\d+'))) id from <yourtable>;
ВЫБРАТЬ * ОТ <TABLE_NAME> ЗАКАЗ ПО БОРЬБЕ (ID КАК ПОКАЗАТЕЛЬ (10, 3)) DESC
<TABLE_NAME>
ID
Первый Varchar нужно отлить как int чтобы выбрать как MAX. Используйте запрос ниже:
select max(CAST(ID as signed)) as max_id from <table-name>;
Это наверняка сработает.
select MAX(CAST(REPLACE(REPLACE(ID, 'D', ''), '', '') as int)) from <table-name>
это должно работать
Select MAX(ID) from table where IsNumeric(ID) = 1 ;