2017-02-20 3 views
0

У меня есть запрос, который возвращает строковый столбец, который я хотел бы сортировать. Когда я сортирую по ASC/DESC, я получаю тот же результат. Вот выход пример:SQL Порядок по строкам, цифры отображаются последними

AVI 
ksky site 
Secure East 
Shlomi 
VSEStaging 
1200165 
120186 
120186 
120186 
120032 

Но я бы иметь номера перед буквенной строки. Например для ASC:

1200165 
120186 
120186 
120186 
120032 
AVI 
ksky site 
Secure East 
Shlomi 
VSEStaging 

Например, для DESC:

VSEStaging 
Shlomi 
Secure East 
ksky site 
AVI 
120032 

Я в настоящее время используют Regex как так:

REGEXP_SUBSTR(UPPER(COLUMN_NAME), '^\D*') , 
TO_NUMBER(REGEXP_SUBSTR(UPPER(COLUMN_NAME), '\d+')) 

Пожалуйста помогите.

+0

Заканчивать ** [последний ответ этого Линка] (https://asktom.oracle.com/pls/apex/f? p = 100: 11: 0 :::: P11_QUESTION_ID: 9522557800346940016) ** –

+0

Предлагаемые решения хороши для ASC, но для DESC. –

+0

Является ли это одним из предположений, что каждая строка будет либо на 100% цифр (без других символов), либо на 100% букв (никаких других символов)? Если это не гарантировано, вам нужно уточнить: как должна быть упорядочена строка '123abcd'? Как насчет '#! -' - где это должно упасть в порядке? И т. Д. – mathguy

ответ

4

Вы можете использовать regexp_like(). Для сортировки по возрастанию:

order by (case when regexp_like(col, '^[0-9]+$') then 1 else 2 end) asc, 
     col asc 
+0

Что относительно DESC? –

+0

@DavidFaiz - это будет работать для ASC и DESC, просто измените последнее слово с 'asc' на' desc' (не трогайте первую строку кода, а только вторую). Это предполагает, что ваши строки: (1) 100% цифр и (2) все остальное. См. Мой комментарий/вопрос под вашим первоначальным сообщением (для уточнения). – mathguy

+0

@DavidFaiz - Вы пытались просто изменить оба 'asc' на' desc'? –

0

Вы могли бы попробовать что-то другое, как это:

order by translate(upper(col), '1234567890', 'abcdefghij') 
Смежные вопросы