2015-06-24 2 views
0

Я хочу знать, как сортировать значения по возрастанию или по убыванию varchar.Как сортировать значения varchar в oracle

Это мое поле и значения Filling_s_no varchar2;

Таблица:

Id Filling_s_no name 
1 1.1.1   X 
1 1.1.10   X 
1 1.1.5   X 
1 1.1.2   X 
1 1.2.1   X 
1 1.2.0   X 

Теперь я хочу, чтобы отсортировать мой стол, как этот формат

Id Filling_s_no name 
1 1.1.1   X 
1 1.1.2   X 
1 1.1.5   X 
1 1.1.10   X 
1 1.2.0   X 
1 1.2.1   X 

Я попытался с этим запросом, но не могу получить решение.

select * 
    from TCD_EX_Tab 
where id=1 
order by Filling_s_no ASC; 
+0

Спасибо, Джастин. Я пытался выровнять этот формат только. – KSK

+1

Вы уверены, что 'fill_s_no' всегда будет иметь три числовых компонента, разделенных точками? Или это может иметь два или четыре или шестьдесят числовых компонентов? Как следует сортировать элементы с более чем тремя элементами? Есть ли причина, по которой вы не храните компоненты отдельно? Композитные атрибуты нарушают все правила нормализации и означают, что вы в конечном итоге пишете тонну логики синтаксического анализа для извлечения отдельных компонентов. –

ответ

1

Следующий запрос будет делать то, что вам нужно:

SELECT ID, FILLING_S_NO, NAME 
    FROM TCD_EX_TAB 
    where id=1 
    order BY TO_NUMBER(REGEXP_SUBSTR(filling_s_no, '[0-9]+', 1, 1)), 
      TO_NUMBER(REGEXP_SUBSTR(filling_s_no, '[0-9]+', 1, 2)), 
      TO_NUMBER(REGEXP_SUBSTR(filling_s_no, '[0-9]+', 1, 3)); 

Проблема должна быть решена в том, что компоненты текстовой строки должны быть преобразованы в числа, чтобы отсортировать, как вы хотите их к. Мы используем регулярное выражение для выделения каждого из подэлементов строки, а затем преобразуем эти подэлементы в тип NUMBER для целей сортировки.

Удачи.

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