Может SQLite сортировать естественно?
может SQLite сортировать естественно? Например,
CREATE TABLE animals (
id INTEGER NOT NULL PRIMARY KEY,
name TEXT NOT NULL
);
INSERT INTO animals (name) VALUES ('Monkey');
INSERT INTO animals (name) VALUES ('manatee');
SELECT name FROM animals ORDER BY name;
name
----------
Monkey
manatee
Я бы предпочел, чтобы результаты были отсортированы естественным образом (т. е. ламантином, обезьяной). У SQLite нет возможности сортировать так? Я сортирую много данных, и если SQLite не может сортировать естественно, я полагаю, что решение состоит в том, чтобы вернуться к PostgreSQL или MySQL.
2 ответов
ORDER BY UPPER(name)
выполнит то, что вы ищете.
кроме того, вы используете SQLite параметры сортировки по умолчанию, что означает, что сравнения выполняются с использованием C memcmp
функция, которая сравнивает байт. В этом случае M и m очень разные. Вы можете изменить столбец, чтобы иметь NOCASE
сортировки. Хотя, просматривая документы, кажется, что вам придется создать новую таблицу, скопировать в нее данные, удалить старую таблицу и переименовать новую, так как ALTER TABLE
команда только переименовывает таблицу или добавляет столбец.
не нужно alter
таблица для изменения параметров сортировки:
SELECT name FROM animals ORDER BY name COLLATE NOCASE;
Если вам нужна более специализированная сортировка, вы можете зарегистрировать свои собственные функции сортировки с помощью sqlite3_create_collation*
семейство функций, а затем использовать COLLATE myCollationFunctionName
.