当前位置:  开发笔记 > 后端 > 正文

SQLite能自然排序吗?

如何解决《SQLite能自然排序吗?》经验,为你挑选了2个好方法。

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.



1> laalto..:

您没有必要alter更改排序规则:

SELECT name FROM animals ORDER BY name COLLATE NOCASE;

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



2> Eric..:

ORDER BY UPPER(name) 将完成你正在寻找的东西.

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


对于在Android中使用SQLite的人,我想提一下Android添加`COLLATE UNICODE`,它也正确地对"ä"等变音符号进行排序,同时`UP​​PER()`和`COLLATE NOCASE`仅对ASCII字符进行操作.
我希望SQLite完全支持ALTER语法,这非常烦人
推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有