2010-03-04 76 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