Может 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.