Как можно сначала отсортировать таблицу по столбцу для числовых букв, а затем с учетом регистра для букв алфавита
Как можно отсортировать таблицу по столбцу varchar2 с символами в разных случаях: верхняя, нижняя, числовая строка
Например, когда я делаю заказ по столбцу NAME, данные столбца:
ANNIE
BOB
Daniel
annie
bob
1abc
Ожидаемый результат:
1abc
ANNIE
annie
BOB
bob
Daniel
3 ответа
Это сложно. Обычный порядок сортировки: aa, aA, Aa, AA, ab, aB, Ab, AB, a1, A1, 1a, 1A. Таким образом, одни и те же имена сгруппированы, а затем строчные буквы идут первыми. Цифры идут после Z.
Это близко к тому, что вы после. Вы хотите, чтобы Бен пришел до БОБа, потому что вы заботитесь о том, чтобы БЕН был до БОБа в первую очередь и только потом о том, что О - капитал, а он - нет. Тем не менее, вы хотите, чтобы цифры стояли перед строчными и прописными перед строчными. Это имеет большое значение в конце концов.
Вы не можете сделать это легко, потому что, хотя вы хотите, чтобы слова (bob, BOB) были сгруппированы, как в порядке по умолчанию, вы хотите, чтобы отдельные символы обрабатывались по-разному. Вы можете сначала упорядочить по нижнему или верхнему порядку, чтобы получить группировку, но это поставит цифры в последнюю очередь, затем вы можете использовать двоичный порядок, чтобы получить A перед a.
order by lower(name), nlssort(name, 'NLS_SORT = BINARY');
Я думаю, что это так близко, как вы получаете со встроенными вещами. Цифры последние. Если вы хотите придерживаться своего специального заказа, вам нужно написать для него функцию и использовать ее.
order by my_own_sort_order(name);
РЕДАКТИРОВАТЬ (после принятия:-) Если подумать: вы хотите исходное поведение сортировки только с переключенным верхним / нижним регистром. Вы можете использовать переводчик для этого:
order by translate(name,
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ');
Вы могли бы сделать что-то вроде:
SELECT *
FROM MyTable
ORDER BY UPPER(MyCol)
Пожалуйста, попробуйте это.
Select * from TableName
Order by ColumnName Collate SQL_Latin1_General_CP850_BIN