我的表名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。
答案 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
使排序不区分大小写。)