Как использовать оператор SQL Order By для сортировки результатов без учета регистра?

120

У меня есть база данных SQLite, которую я пытаюсь сортировать по алфавиту. Проблема в том, что SQLite не рассматривает A = a при сортировке, поэтому я получаю такие результаты:

а В С T б с г

Я хочу получить:

а б В С с г Т

Какую специальную вещь SQL нужно сделать, о которой я не знаю?

SELECT * FROM NOTES ORDER BY title
  • 1
    И какой способ сделать это эффективнее? «ЗАКАЗАТЬ НАЗВАНИЕ КОЛЛЕКТОРА NOCASE» или «ЗАКАЗАТЬ ПО НИЖЕ (НАЗВАНИЕ)» (FYI, в моем случае, работает на Android, т.е. SQLite)
Теги:
sorting
sql-order-by

3 ответа

199
Лучший ответ

Вы также можете сделать ORDER BY TITLE COLLATE NOCASE.

Изменить: если вам нужно указать ASC или DESC, добавьте это после NOCASE, как

ORDER BY TITLE COLLATE NOCASE ASC

или

ORDER BY TITLE COLLATE NOCASE DESC

  • 5
    Является ли "ORDER BY TITLE COLLATE NOCASE" более эффективным, чем "ORDER BY LOWER (TITLE)"?
  • 0
    Это сосет! не так ли? Вот Это Да! почему, черт возьми, SQLite делает его чувствительным к регистру для сортировки ... не в моей голове ... к сожалению!
Показать ещё 3 комментария
81

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

SELECT * FROM NOTES ORDER BY LOWER(title);

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

SELECT * FROM NOTES ORDER BY LOWER(title), title;
  • 1
    Я сортирую по нескольким столбцам, нужно ли ставить НИЖЕ вокруг каждого?
  • 2
    Да, нет способа изменить поведение ORDER BY, чтобы оно не чувствительно к регистру.
Показать ещё 7 комментариев
0
SELECT * FROM NOTES ORDER BY UPPER(title)              
  • 11
    Спасибо за Ваш ответ. Но: хороший ответ всегда будет иметь объяснение того, что было сделано и почему это было сделано таким образом, не только для ФП, но и для будущих посетителей SO.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню