Как изменить сортировку базы данных sqlite3 для незаметного сортировки регистра?
У меня есть запрос для базы данных sqlite3, которая предоставляет отсортированные данные. Данные сортируются на основе столбца, который является столбцом varchar
"Имя". Теперь, когда я делаю запрос
select * from tableNames Order by Name;
Он предоставляет такие данные.
Pen
Stapler
pencil
означает, что он рассматривает материал, чувствительный к регистру. То, что я хочу, выглядит следующим образом
Pen
pencil
Stapler
Итак, какие изменения я должен внести в базу данных sqlite3 для получения необходимых результатов?
Связано с Как установить Sqlite3 как нечувствительный к регистру при сравнении строк?
Ответы
Ответ 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