SQL Order Byステートメントを使用して、大文字と小文字を区別しない結果を並べ替える方法


144

アルファベット順でソートしようとしているSQLiteデータベースがあります。問題は、SQLiteがソート中にA = aを考慮していないように見えるため、次のような結果が得られることです。

A B C T a b c g

私は手に入れたい:

A a b B C c g T

私が知らない特別なSQLの処理を行う必要があるのですか?

SELECT * FROM NOTES ORDER BY title

2
そしてそれを行うためのより効率的な方法は何ですか?「ORDER BY TITLE COLLATE NOCASE」または「ORDER BY LOWER(TITLE)」。(私の場合、Android、つまりSQLiteで実行されている)
Pascal

回答:


253

あなたも行うことができますORDER BY TITLE COLLATE NOCASE

編集:ASCまたはを指定する必要がある場合はDESCNOCASE好きな後にこれを追加します

ORDER BY TITLE COLLATE NOCASE ASC

または

ORDER BY TITLE COLLATE NOCASE DESC

8
「ORDER BY TITLE COLLATE NOCASE」は「ORDER BY LOWER(TITLE)」よりも効率的ですか?
Pascal

やった!ね?うわー!なぜSQLiteがソートの大文字と小文字を区別するのか...私の心には合わない...残念ながら!
ビンシー2018

1
@ヴィンシー:大文字と小文字を区別する文字列比較について何が変なのかわかりません。それは方法です<==私は精通してることを、すべてのプログラミング言語では、デフォルトでは、など事業者の仕事。
dan04 2018

@ dan04どのくらいの頻度で大文字と小文字を区別する必要がある文字列が必要ですか?それがばかげている理由です。文字列をソートするときに、世界中の誰がケースを気にしますか?私が利点を見つける唯一の場所は、認証またはパスワード検証のためです!それがデフォルトである理由です、それはCASE INSENSITIVE、imoでなければなりません!
ビンシー2018

データベースがUTF8を使用している場合、これは通常、そのままでは機能しません。(タイトルがSQLiteだけを指しているわけではないことに注意してください。)この場合、以下のlower()またはupper()を使用することをお勧めします。
marco 2018

99

並べ替えの目的で、すべてを小文字に変換することができます。

SELECT * FROM NOTES ORDER BY LOWER(title);

大文字のものが小文字のものより先に来ることを確認したい場合は、それを二次ソートとして追加してください:

SELECT * FROM NOTES ORDER BY LOWER(title), title;

1
複数の列で並べ替えていますが、各列の周りにLOWERを付ける必要がありますか?
CodeFusionMobile 2010年

2
はい、ORDER BYの動作を大文字と小文字を区別しないように変更する方法はありません。
Chad Birch

1
'UPPER'と 'LOWER'の間に違いはありますか
Jagadeesh

2
この目的のために、両方が同じ効果を達成することはありません。つまり、すべてのアイテムのケースを同じにします。
ベン・バロン

1
これらは、文字[] ^ _ `のみが異なります。
dan04 2014年

0
SELECT * FROM NOTES ORDER BY UPPER(title)              

14
ご回答有難うございます。しかし:良い答えは常に、OPだけでなくSOへの将来の訪問者のために、何が行われたか、なぜそのように行われたのかについての説明があります。
B001ᛦ2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.