Подтвердить что ты не робот

Как изменить сортировку базы данных sqlite3 для незаметного сортировки регистра?

У меня есть запрос для базы данных sqlite3, которая предоставляет отсортированные данные. Данные сортируются на основе столбца, который является столбцом varchar "Имя". Теперь, когда я делаю запрос

select * from tableNames Order by Name;

Он предоставляет такие данные.

    Pen
    Stapler
    pencil

означает, что он рассматривает материал, чувствительный к регистру. То, что я хочу, выглядит следующим образом

    Pen
    pencil
    Stapler

Итак, какие изменения я должен внести в базу данных sqlite3 для получения необходимых результатов?

Связано с Как установить Sqlite3 как нечувствительный к регистру при сравнении строк?

4b9b3361

Ответ 1

Документация SQLite Datatypes описывает пользовательские последовательности сортировки. В частности, вы используете COLLATE NOCASE для достижения своей цели.

Они приводят пример:

CREATE TABLE t1(
    a,                 -- default collation type BINARY
    b COLLATE BINARY,  -- default collation type BINARY
    c COLLATE REVERSE, -- default collation type REVERSE
    d COLLATE NOCASE   -- default collation type NOCASE
);

и обратите внимание, что:

- Группировка выполняется с использованием последовательности сортировки NOCASE (т.е. значений - 'abc' и 'ABC' помещаются в одну группу). SELECT count (*) GROUP BY d FROM t1;

Ответ 2

Для сортировки Нечувствительность к регистру вы можете использовать ORDER BY Name COLLATE NOCASE

Ответ 3

select * from tableNames Order by lower(Name);
Майкл ван дер Вестхуйзен объясняет в своем комментарии ниже, почему это не очень хорошо. Я оставляю этот ответ таким образом, чтобы сохранить его комментарий и служить предупреждением другим, у кого может быть такая же "яркая" идея, которую я имел; -)

Ответ 4

Используйте этот оператор в базе данных SQLite:

PRAGMA case_sensitive_like = false