Oracle sql порядок по столбцу, содержащему символы - PullRequest
0 голосов
/ 29 января 2020

Как заказать по столбцу varchar, содержащему следующие значения?

10/23c abc 1
10/23c abc 5
10/23c abc 3
10/23c abc 2
tx#5- abc 11
tx#5- deb 9
tx#5- cdg 16
tx#5- abc 5
....

до следующего,

10/23c abc 1
10/23c abc 2
10/23c abc 3
10/23c abc 5
tx#5- abc 5
tx#5- abc 11 
tx#5- cdg 16
tx#5- deb 9

Ответы [ 2 ]

1 голос
/ 29 января 2020

Предполагая, что у вас есть три компонента, разделенные пробелами, и последний является целым числом, вы можете сделать:

order by regexp_substr(col, '[^ ]+', 1, 1),
         regexp_substr(col, '[^ ]+', 1, 2),
         cast(regexp_substr(col, '[^ ]+', 1, 3) as number)
0 голосов
/ 29 января 2020

Так как количество компонентов является переменным и только последний является цифрой c, вы можете просто упорядочить всю строку, но добавив первые 0 к последнему компоненту.

Это можно сделать следующим образом:

ORDER BY SUBSTR(col, 1, INSTR(col, ' ', -1)) || LPAD(SUBSTR(col, INSTR(col, ' ', -1) + 1), 8, '0');

Т.е. извлеките всю строку до последнего пробела, затем добавьте первые 0 к последней части и объедините 2 подстроки.

РЕДАКТИРОВАТЬ: Это из Курс заставляет first second 1 следовать за first second third 2. Это потому, что цифры идут после букв.
Не уверен, что это именно то, что вам нужно.

ДРУГОЕ РЕДАКТИРОВАНИЕ: Не уверен, что разделитель всегда один пробел или может быть кратным.
Если это так, создайте выражение, которое заменяет несколько пробелов на один.
См. Oracle Обновите несколько пробелов в столбце одним пробелом

ОБНОВЛЕНИЕ:
Следующее выражение извлекает целое число после последнего пробела:

SUBSTR(col, INSTR(col, ' ', -1) + 1)

Выражение INSTR(col, ' ', -1) возвращает позицию последнего пробела.
После этого принимайте подстроку, начиная с первый символ после этого последнего пробела.

...