2010-03-04 74 views
28
private Cursor getContacts() 
    { 
     // Run query 
     Uri uri = ContactsContract.Contacts.CONTENT_URI; 
     String[] projection = new String[] { 
       ContactsContract.Contacts._ID, 
       ContactsContract.Contacts.DISPLAY_NAME 
     }; 
     String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '" + 
       (mShowInvisible ? "0" : "1") + "'"; 
     String[] selectionArgs = null; 
     String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC"; 

     return managedQuery(uri, projection, selection, selectionArgs, sortOrder); 
    } 

COLLATE LOCALIZED ASC代表什麼?COLLATE LOCALIZED ASC代表什麼?

回答

30

整理只是幻想說話排序(很好)。所以這是基於本地化偏好(即當前語言的字母表和約定)在asc結束順序中的排序。

+0

我必須定義什麼除了我的表架構能夠使用它嗎?這是SQLite具體還是隻針對Android?我可以按這些所有自定義列排序嗎? – Pentium10 2010-03-04 16:10:43

+0

ASC表示升序。它完全不需要使用ASCII。 – 2015-05-26 23:00:16

12

COLLATE是一個SQL操作符,它允許您重寫字符串的默認排序順序。例如,「COLLATE NOCASE」不區分大小寫,「COLLATE BINARY」區分大小寫。

SQLite C界面允許您定義自定義排序規則(http://www.sqlite.org/c3ref/create_collation.html)。

19

它指示SQLite適當地排序非ASCII字符。帶有變音符號的字符(有些人稱它們爲重音符)比字符Z具有更高的字節編碼,因此純ASCII的排序不適合許多外語。

例如,大寫A char的字節代碼是0x41,大寫Z char是0x5A。那麼我們有Unicode(大寫A),Unicode中的代碼是0x00C1。所以一個普通的字節代碼排序會導致Á在Z之後。

但是在具有這種字符的語言中,慣例是將那些帶有變音符號的語言當作沒有變音符號。所以A應與平原在一起,至少B.

,並說明,我們有以下的名單使用他們的字節碼進行排序:

  • 布倫達
  • 黛比
  • 喬治
  • 阿爾瓦羅
  • 艾力

無W¯¯使用COLLATE LOCALIZED它將由字符的 「基地」 進行排序:

  • 阿爾瓦羅
  • 布倫達
  • 黛比
  • 艾力
  • 喬治
+3

這應該是最有利的,用例子很好的解釋。 – 2015-08-06 10:02:57