Cursorloader 排序顺序按字母顺序然后数字
Cursorloader sort order alphabetical then numeric
从联系人 table 中提取数据时,是否可以先按字母顺序对结果进行排序,然后再按数字排序?
代码片段:
cursorLoader.setSortOrder(
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC, " +
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " ASC, " +
ContactsContract.CommonDataKinds.Phone.IS_SUPER_PRIMARY + " DESC, " +
ContactsContract.CommonDataKinds.Phone.IS_PRIMARY + " DESC");
这导致数值出现在字母值之前
如果您的意思是显示名称可以包含数字和姓名,并且您希望数字显示在最后,例如
并且您希望 Fred 在 01 23456 7890 之前出现,但让 Alan 在 Fred 之前出现,那么一种方法是引入一种检测值是否为数字的方法。这可以通过尝试使用 CAST 将值转换为数字(本例中为整数)来实现。
所以不是 :-
SELECT * FROM phonedata ORDER BY display_name ASC, contact_id ASC, is_super_primary DESC, is_primary DESC
结果是:-
您可以按照以下方式使用:-
SELECT
CAST(replace(display_name,' ','') AS INTEGER) AS converted,
*
FROM phonedata
ORDER BY CAST(replace(display_name,' ','') AS INTEGER) ASC,
display_name ASC,
contact_id ASC,
is_super_primary DESC,
is_primary DESC
这会产生:-
备注
- 已包含转换后的列以供说明。
- 这表明字母值如何从 CAST 中得出 0,从而使其成为排序的最高顺序,而数值(0 除外)
- 您可能需要调整以上内容,但基本上原则适用
从联系人 table 中提取数据时,是否可以先按字母顺序对结果进行排序,然后再按数字排序?
代码片段:
cursorLoader.setSortOrder(
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC, " +
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " ASC, " +
ContactsContract.CommonDataKinds.Phone.IS_SUPER_PRIMARY + " DESC, " +
ContactsContract.CommonDataKinds.Phone.IS_PRIMARY + " DESC");
这导致数值出现在字母值之前
如果您的意思是显示名称可以包含数字和姓名,并且您希望数字显示在最后,例如
并且您希望 Fred 在 01 23456 7890 之前出现,但让 Alan 在 Fred 之前出现,那么一种方法是引入一种检测值是否为数字的方法。这可以通过尝试使用 CAST 将值转换为数字(本例中为整数)来实现。
所以不是 :-
SELECT * FROM phonedata ORDER BY display_name ASC, contact_id ASC, is_super_primary DESC, is_primary DESC
结果是:-
您可以按照以下方式使用:-
SELECT
CAST(replace(display_name,' ','') AS INTEGER) AS converted,
*
FROM phonedata
ORDER BY CAST(replace(display_name,' ','') AS INTEGER) ASC,
display_name ASC,
contact_id ASC,
is_super_primary DESC,
is_primary DESC
这会产生:-
备注
- 已包含转换后的列以供说明。
- 这表明字母值如何从 CAST 中得出 0,从而使其成为排序的最高顺序,而数值(0 除外)
- 您可能需要调整以上内容,但基本上原则适用