对特殊字符进行特殊排序?

use*_*455 5 sqlite sql-order-by android-sqlite

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

Select * from contacts order by name collate nocase asc;
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

上面的顺序很好,但我希望以特殊字符 [#、$ 或任何其他非字母] 开头的名称位于结果的底部而不是顶部。我应该在查询中修改哪些内容才能获得所需的结果。

注意:我正在使用 sqlite。

CL.*_*CL. 3

您必须~在任何此类字符串前面添加一些字符(按字母排序)。当您仅在 ORDER BY 子句中执行此操作时,它仅影响排序而不影响返回值:

SELECT *
FROM contacts
ORDER BY CASE WHEN name GLOB '[A-Za-z]*'
              THEN name
              ELSE '~' || name
         END COLLATE NOCASE;
Run Code Online (Sandbox Code Playgroud)

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