2009-07-04 4 views
7

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 

自然にソートされた結果(manatee、Monkey)が望ましいです。 SQLiteにはこのようなソートのオプションがありませんか?私は大量のデータを並べ替えます.SQLiteが自然にソートできないのであれば、解決策はPostgreSQLまたはMySQLに戻ることです。

答えて

7

ORDER BY UPPER(name)あなたが探しているものを達成します。

さらに、SQLite default collationを使用しています。つまり、比較は、バイトを比較するCのmemcmp関数を使用して行われます。この場合、Mとmは非常に異なっています。列を変更してNOCASEの照合順序にすることができます。 ALTER TABLEコマンドはテーブルの名前を変更するか、またはカラムを追加するだけなので、ドキュメントを見て、新しいテーブルを作成し、そのテーブルにデータをコピーし、古いテーブルを削除して新しいテーブルの名前を変更する必要があります。あなたはより多くの専門的なソートが必要な場合は

SELECT name FROM animals ORDER BY name COLLATE NOCASE; 

、あなたが機能のsqlite3_create_collation*家族と一緒に、独自の照合機能を登録することができ、その後、COLLATE myCollationFunctionNameを使用します。

+0

自然ではありませんが(それでも1,10,11,12,2,3などのソート)、それは私が作業しているテーブルで動作します。ありがとう! –

+2

私はSQLiteがALTER構文を完全にサポートしたいと思っています。それは非常に面倒です – colithium

+0

@マーク:自然秩序(例:映画のタイトル)を考慮する人もいます。 SQLiteで数値的にソートする方法を知りたい場合は、別の質問を投稿してください。その周辺のパラメータは少し違っているので、SQLiteに慣れている方がIよりも魅力的です。 – Eric

11

あなたはalterに照合が変更するテーブルを持っていません。

関連する問題