Заказать столбец String через пробел

Стол с именем ASORT имеет следующее определение и вставки (в указанном порядке):

CREATE TABLE asort(a NUMBER, b VARCHAR2(5));

INSERT INTO asort VALUES(1, '1 11'); 
INSERT INTO asort VALUES(2, '11');
INSERT INTO asort VALUES(3, '1 10');
INSERT INTO asort VALUES(4, '1 3');
INSERT INTO asort VALUES(5, '1 5');
INSERT INTO asort VALUES(6, '1 20');
INSERT INTO asort VALUES(7, '1 14');
INSERT INTO asort VALUES(8, '1');

SELECT * 
FROM asort 
ORDER BY b; -- returns the below result

Но желаемый порядок состоит в том, что все числа после пробела также должны быть отсортированы, как показано ниже.

Пожалуйста, предложите запрос для достижения желаемого результата.

Спасибо..!!

1 ответ

Решение

Ты можешь использовать regexp_substr() извлечь n-й элемент из списка с разделителями. Затем вы можете преобразовать эти значения в числа и упорядочить по ним. Что-то вроде:

ORDER BY cast(replace(regexp_substr(b||' ', '[0-9]+ ', 1, 1), ' ', '') as int) NULLS FIRST,
         cast(replace(regexp_substr(b||' ', '[0-9]+ ', 1, 2), ' ', '') as int)

Вот SQL Fiddle.

Другие вопросы по тегам