Sonuçları büyük / küçük harfe duyarsız olarak sıralamak için SQL Order By deyimi nasıl kullanılır?


144

Alfabetik sıraya göre sıralamak çalışıyorum bir SQLite veritabanı var. Sorun, SQLite sıralama sırasında A = a düşünmüyor gibi görünüyor, bu nedenle böyle sonuçlar elde:

A B C T a b c g

Elde etmek istiyorum:

A a b B C c g T

Bilmediğim hangi özel SQL şeyin yapılması gerekiyor?

SELECT * FROM NOTES ORDER BY title

2
Ve bunu yapmanın daha etkili yolu nedir? "SİPARİŞ TARAFI COLLATE NOCASE" veya "SİPARİŞ TARAFINDAN (TITLE)". (FYI, benim durumumda, Android'de çalışıyor, yani SQLite)
Pascal

Yanıtlar:


253

Siz de yapabilirsiniz ORDER BY TITLE COLLATE NOCASE.

Düzenleme: Belirttiğiniz gerekiyorsa ASCya DESC, sonra bu eklemek NOCASEgibi

ORDER BY TITLE COLLATE NOCASE ASC

veya

ORDER BY TITLE COLLATE NOCASE DESC

8
"ORDER BY TITLE COLLATE NOCASE", "ORDER BY LOWER (TITLE)" daha verimli mi?
Pascal

BU BERBAT! değil mi? Vaov! neden SQLite sıralama için büyük / küçük harfe duyarlı hale getirir .... ne yazık ki!
Vincy

1
@Vincy: Büyük / küçük harfe duyarlı dize karşılaştırması hakkında neyin garip olduğunu göremiyorum. Yıllardan bu nasıl <, ==ben aşina olduğum her programlama dilinde varsayılan olarak vs. operatörler çalışır.
dan04

@ dan04, büyük / küçük harfe duyarlı olması gereken bir dizeye ne sıklıkta ihtiyacınız var? bu yüzden saçma. bir dize sıralarken dünyada kim vakaları önemsiyor Avantajı gördüğüm tek yer kimlik doğrulama veya şifre doğrulaması için! Bu yüzden VAKA SENSENSIVE olmalı, imo!
Vincy

Veritabanı UTF8 kullanıyorsa, bu genellikle kutudan çıkmaz. (Başlığın sadece SQLite ile ilgili olmadığına dikkat edin.) Bu durumda, aşağıdaki alt () veya upper () kullanılması önerisi işe yarar.
marco

99

Sıralama amacıyla her şeyi küçük harfe dönüştürebilirsiniz:

SELECT * FROM NOTES ORDER BY LOWER(title);

Büyük harflerin hala küçük harflerin önünde olduğundan emin olmak istiyorsanız, bunu ikincil bir sıralama olarak ekleyin:

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

1
Birden çok sütuna göre sıralıyorum, LOWER'u her birinin etrafına koymak zorunda mıyım?
CodeFusionMobile

2
Evet, ORDER BY davranışını büyük / küçük harfe duyarlı olmayacak şekilde değiştirmenin bir yolu yoktur.
Chad Birch

1
'ÜST' ve 'ALT' arasında herhangi bir fark var mı
Jagadeesh

2
Bu amaçla, hayır her ikisi de aynı etkiye ulaşamaz, bu da tüm öğelerin durumunu aynı yapmaktır.
Ben Baron

1
Yalnızca [] ^ _ `karakterleri için farklıdırlar.
dan04

0
SELECT * FROM NOTES ORDER BY UPPER(title)              

14
Cevabınız için teşekkürler. Ancak: İyi bir cevap her zaman ne yapıldığını ve bunun neden sadece OP için değil, SO'ya gelecek ziyaretçiler için de bu şekilde yapıldığına dair bir açıklama olacaktır.
B001 ᛦ
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.