【问题标题】:Sorting special characters specially?专门对特殊字符进行排序?
【发布时间】:2015-02-08 03:54:02
【问题描述】:

我有一个表名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。

【问题讨论】:

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


【解决方案1】:

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

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

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

【讨论】:

  • 您的解决方案有效,但现在以“a”开头的名称位于以“Z”开头的名称之后。我希望以“a”或“A”开头的名称位于同一位置。
  • @user818455 名字可以用大写还是小写?
  • 我认为... WHEN name GLOB '[a-zA-Z]*' ... 会更好。 :)
  • @CL。 np,谢谢你的回答,它帮助我找到了适合我的案例的解决方案:D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-07-05
  • 1970-01-01
  • 2016-09-13
  • 1970-01-01
  • 2020-11-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多