Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQLite可以自然排序吗?_Sqlite_Sorting - Fatal编程技术网

SQLite可以自然排序吗?

SQLite可以自然排序吗?,sqlite,sorting,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

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。

按上(名称)排序。
将完成您要查找的内容


此外,您使用的是,这意味着比较是使用C的
memcmp
函数完成的,该函数比较字节。在这种情况下,M和M是非常不同的。您可以将该列更改为具有
NOCASE
排序规则。尽管如此,查看文档时,您似乎必须创建一个新表,将数据复制到其中,删除旧表并重命名新表,因为
ALTER table
命令仅重命名表或添加列。

您不必
ALTER
表来更改排序规则:

SELECT name FROM animals ORDER BY name COLLATE NOCASE;

如果您需要更专业的排序,您可以使用
sqlite3\u create\u collation*
函数族注册自己的排序函数,然后使用
COLLATE myCallationFunctionName

不完全自然(它仍然对1、10、11、12、2、3等进行排序),但这适用于我正在使用的表。谢谢我希望SQLite能够完全支持ALTER语法,这很麻烦,不需要ALTER,您可以直接在select语句中指定排序规则。请看下面我的答案。@laalto:是的,但它仍然只在每个查询的基础上工作,而不是在表级别。对于在Android中使用SQLite的人,我想提到的是Android添加了
COLLATE UNICODE
,它还正确地对umlauts进行排序,如“ä”,而
UPPER()
COLLATE NOCASE
都只对ASCII字符进行操作。