10 г упорядочение столбцов varchar при наличии чисел перед - PullRequest
5 голосов
/ 10 марта 2011

У меня есть Oracle 10g DB, и у меня есть столбец VARCHAR2 (2000 символов), назовите его TEST, например, могут содержать числа впереди:

test
1test
3test

Когда я звоню "... упорядочить по TESTasc "or simply" ... order by TEST "

Я получаю результаты, упорядоченные как

test
1test
3test

Но я бы хотел упорядочить результаты следующим образом:

1test
3test
test

Итак, нумерованные вставки в первую очередь, есть ли способ добиться этого?

Ответы [ 4 ]

5 голосов
/ 10 марта 2011

На что установлено NLS_SORT ? (select sys_context('USERENV', 'NLS_SORT') from dual). Если это BINARY, то порядок сортировки основан на числовом значении каждого символа, поэтому он зависит от набора символов базы данных. Если это что-то еще, вы можете переопределить это.

Вы можете изменить порядок сортировки на уровне базы данных или сеанса, изменив этот параметр, но вы также можете изменить его для одного запроса:

order by nlssort(test,'NLS_SORT=BINARY')

В зависимости от набора символов вам может потребоваться поэкспериментировать с другими значениями вместо BINARY. Вы можете получить список всех допустимых значений с помощью select value from v$nls_valid_values where parameter = 'SORT'. Но обратите внимание на потенциальную производительность, упомянутую в документации NLS_SORT.

Функция nlssort() задокументирована здесь .

4 голосов
/ 10 марта 2011

Вы можете заменить предыдущий ответ подстрок теста на регулярное выражение

order by case when regexp_instr(test,'[0-9]+') = 1 then 
   to_number(regexp_substr(test,'[0-9]+')) 
else 
   null 
end nulls last, test

Это должно быть что-то вроде этого - вы можете настроить регулярное выражение в соответствии с тем, что вы хотите.

3 голосов
/ 10 марта 2011

В одну сторону:

order by case when substr(test,1,1) between '0' and '9' then 1 else 2 end,
         test
0 голосов
/ 25 октября 2017

Использование substr работает нормально. Если мы хотим, чтобы числа в порядке возрастания и символы в порядке убывания. Каков обходной путь.

...