Jak używać instrukcji SQL Order By sortować wyniki bez rozróżniania wielkości liter?


144

Mam bazę danych SQLite, którą próbuję posortować według kolejności alfabetycznej. Problem w tym, że SQLite nie bierze pod uwagę A = a podczas sortowania, więc otrzymuję takie wyniki:

A B C T a b c g

Chcę dostać:

A a b B C c g T

Jaką specjalną rzecz należy zrobić w języku SQL, o której nie wiem?

SELECT * FROM NOTES ORDER BY title

2
A jaki jest skuteczniejszy sposób na zrobienie tego? „ZAMÓWIENIE WEDŁUG TYTUŁU SORTUJ NOCASE” lub „ZAMÓWIENIE NA DOLNYM (TYTUŁ)”. (FYI, w moim przypadku na Androidzie, czyli SQLite)
— Pascal

Odpowiedzi:


253

Ty też możesz to zrobić ORDER BY TITLE COLLATE NOCASE.

Edycja: jeśli chcesz określić ASClub DESC, dodaj to po NOCASEpolubieniu

ORDER BY TITLE COLLATE NOCASE ASC

lub

ORDER BY TITLE COLLATE NOCASE DESC

8
Czy „ORDER BY TITLE COLLATE NOCASE” jest bardziej wydajne niż „ORDER BY LOWER (TITLE)”?
— Pascal

TO DO BANIA! prawda? Łał! dlaczego do cholery SQLite rozróżnia wielkość liter przy sortowaniu… nie pasuje mi to… niestety!
— Vincy,

1
@ Vincy: Nie rozumiem, co jest takiego dziwnego w porównaniu ciągów uwzględniających wielkość liter. To jak <, ==itp operatorzy pracują domyślnie w każdym języku programowania, który ja znam.
— dan04,

@ dan04 jak często potrzebujesz ciągu znaków, w którym wielkość liter ma znaczenie? dlatego jest to śmieszne. kto na świecie przejmuje się sprawami podczas sortowania ciągu? Jedyne miejsce, w którym widzę tę zaletę, to uwierzytelnianie lub weryfikacja hasła! Dlatego domyślnie musi być NIEWRAŻLIWA NA WIELKOŚĆ LITER, imo!
— Vincy,

Zwykle nie zadziała to po wyjęciu z pudełka, jeśli baza danych używa UTF8. (Zauważ, że tytuł nie odnosi się tylko do SQLite.) W tym przypadku sugestia użycia lower () lub upper () poniżej jest tą, która działa.
— marco

99

Możesz po prostu przekonwertować wszystko na małe litery w celu sortowania:

SELECT * FROM NOTES ORDER BY LOWER(title);

Jeśli chcesz mieć pewność, że wielkie litery nadal kończą się przed małymi, po prostu dodaj to jako drugie sortowanie:

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

1
Sortuję według wielu kolumn, czy muszę umieszczać LOWER wokół każdej z nich?
— CodeFusionMobile,

2
Tak, nie ma sposobu, aby zmienić zachowanie ORDER BY, aby nie rozróżniało wielkości liter.
— Chad Birch

1
Czy jest jakaś różnica między „UPPER” a „LOWER”
— Jagadeesh

2
W tym celu nie, oba osiągną ten sam efekt, czyli sprawią, że przypadek wszystkich przedmiotów będzie taki sam.
— Ben Baron

1
Różnią się tylko znakami [] ^ _ `.
— dan04

0
SELECT * FROM NOTES ORDER BY UPPER(title)              

14
Dziękuję za odpowiedź. Ale: Dobra odpowiedź zawsze będzie zawierała wyjaśnienie, co zostało zrobione i dlaczego zostało to zrobione w taki sposób, nie tylko dla PO, ale dla przyszłych gości SO.
— B001 ᛦ
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.