2015-06-11 2 views
0

У меня есть данные, как показано ниже, и идентификатор VARCHAR2 типаКак найти максимальное значение буквенно-цифрового поля в оракуле?

Название таблицы: EMP

ID TST_DATE 
A035  05/12/2015 
BAB0  05/12/2015 
701 07/12/2015 
81  07/12/2015 

Я использовал ниже запрос, чтобы получить максимум из группы идентификаторов по TST_DATE.

SELECT TST_DATE,MAX(ID) from EMP group by TST_DATE; 

TST_DATE  MAX(ID) 
05/12/2015 BAB0 
07/12/2015 81 

Во втором ряду он возвращался 81 вместо 701.

+0

Конечно, он возвращает 81, потому что '' 8'' больше, чем '701'' –

+1

Строка сортируется по [лексикографическому порядку] (http://en.wikipedia.org/wiki/Lexicographic_order) –

ответ

2

Для сортировки строк, которые представляют собой (HEX) чисел в числовом, а не лексикографическом, для того, нужно, чтобы преобразовать их в реальные цифры:

SELECT TST_DATE, ID, TO_NUMBER(ID, 'XXXXXXXXXX') from EMP 
ORDER BY TO_NUMBER(ID, 'XXXXXXXXXX'); 

TST_DATE ID    TO_NUMBER(ID,'XXXXXXXXXX') 
---------- ---- --------------------------------------- 
07/12/2015 81          129 
07/12/2015 701          1793 
05/12/2015 A035         41013 
05/12/2015 BAB0         47792 

Вы можете использовать эту цифровую форму внутри вашего max() и преобразовать обратно в шестнадцатеричной строки для отображения:

SELECT TST_DATE, 
    TO_CHAR(MAX(TO_NUMBER(ID, 'XXXXXXXXXX')), 'XXXXXXXXXX') 
from EMP group by TST_DATE; 

TST_DATE TO_CHAR(MAX 
---------- ----------- 
07/12/2015   701 
05/12/2015  BAB0 

С подходящим количеством Xs в моделях формата, конечно; сколько зависит от размера столбца varchar2.

+0

Получение ошибки ORA-01722 Неверная ошибка числа при выполнении запроса, SELECT TST_DATE, идентификатор, TO_NUMBER (ID, 'XXXXXXXXXX) из EMP ORDER BY TO_NUMBER (ID,' XXXXXXXXXX '); –

+0

@MidhunKrishna - каков размер столбца и какова его самая длинная ценность? Являются ли какие-либо значения не буквенно-цифровыми? –

+0

Спасибо за ответ Alex..The column является столбцом varchar, а его длина равна 4. Значения представляют собой сочетание буквенно-цифровых и цифр. Например, 001, 045 571, A870, B787,81 и т. Д. –

Смежные вопросы