SQL Порядок по строке, числа идут последними

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

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

Но я бы хотел, чтобы цифры стояли перед буквенной строкой. Например, для АСЦ:

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+'))

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


person David Faizulaev    schedule 20.02.2017    source источник
comment
Ознакомьтесь с этой ссылкой последний ответ   -  person Piotr Kamoda    schedule 20.02.2017
comment
Предоставленные решения хороши для ASC, но для DESC.   -  person David Faizulaev    schedule 20.02.2017
comment
Является ли это одним из предположений, что каждая строка будет состоять либо из 100% цифр (без других символов), либо из 100% букв (без других символов)? Если это не гарантировано, то вам нужно уточнить: как должна быть упорядочена строка 123abcd? Как насчет #!- - где это должно быть в порядке? И т.п.   -  person mathguy    schedule 20.02.2017
comment
@DavidFaiz, вы пытались просто добавить desc в решение в конце предложения ORDER BY?   -  person Piotr Kamoda    schedule 20.02.2017


Ответы (2)


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

order by (case when regexp_like(col, '^[0-9]+$') then 1 else 2 end) asc,
         col asc
person Gordon Linoff    schedule 20.02.2017
comment
@DavidFaiz - это будет работать для ASC и DESC, просто измените последнее слово с asc на desc (не трогайте первую строку кода, только вторую). Это предполагает, что ваши строки состоят из (1) 100% цифр и (2) всего остального. См. мой комментарий/вопрос под исходным сообщением (для уточнения). - person mathguy; 20.02.2017
comment
@DavidFaiz - вы пытались просто изменить оба asc на desc? - person Alex Poole; 20.02.2017
comment
@AlexPoole - я так понимаю, ОП хочет, чтобы числа были вверху независимо от ASC или DESC, поэтому ему следует изменить только второй ASC на DESC. - person mathguy; 20.02.2017
comment
@mathguy - это не то, что показано в конце вопроса. Сначала у него есть строки (desc; возможно, нечувствительные к регистру, чтобы добавить веселья), за которыми следуют числа (показана только одна, не уверен, должны ли они быть asc или desc, более поздние видят разумное предположение). - person Alex Poole; 20.02.2017

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

order by translate(upper(col), '1234567890', 'abcdefghij')
person user6585756    schedule 23.03.2017