特别排序特殊字符?

时间:2014-12-10 03:19:35

标签: sqlite sql-order-by android-sqlite

我的表名contacts[ "id","name","age" ]列。我需要按名称按升序排列所有联系人。我为它写了以下查询:

Select * from contacts order by name collate nocase asc;

我从上面的查询得到的结果如下:

1. 11 | #ax Nene | 21
1. 21 | 123 Ray | 22
1. 33 | maxy Wel | 25
1. 41 | Max Vele | 23
1. 53 | Nam sing | 25

上面的排序很好但是我想要以特殊字符[#,$或任何其他非字母表]开头的名称在结果的底部而不是在顶部。我应该在查询中修改什么来实现期望的结果。

注意:我正在使用sqlite。

1 个答案:

答案 0 :(得分:1)

你必须在~之前(在字母后面排序)添加一些字符到任何这样的字符串。 仅在ORDER BY子句中执行此操作时,它仅影响排序,而不影响返回的值:

SELECT *
FROM contacts
ORDER BY CASE WHEN name GLOB '[A-Za-z]*'
              THEN name
              ELSE '~' || name
         END COLLATE NOCASE;

COLLATE NOCASE使排序不区分大小写。)