SQLite能自然排序吗?

时间:2009-07-04 03:09:23

标签: sqlite sorting

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 个答案:

答案 0 :(得分:11)

您无需alter表格来更改排序规则:

SELECT name FROM animals ORDER BY name COLLATE NOCASE;

如果您需要更专业的排序,可以使用sqlite3_create_collation*系列函数注册自己的排序规则函数,然后使用COLLATE myCollationFunctionName

答案 1 :(得分:7)

ORDER BY UPPER(name)将实现您的目标。

此外,您正在使用SQLite default collation,这意味着使用C的memcmp函数进行比较,该函数比较字节。在这种情况下,M和m非常不同。您可以将列更改为NOCASE排序规则。但是,查看文档时,您似乎必须创建一个新表,将数据复制到其中,删除旧表并重命名新表,因为ALTER TABLE命令只重命名表或添加一栏。