SQlite按个案查询

时间:2011-05-29 16:36:23

标签: android sql sqlite sql-order-by

我的表中包含两种类型的文本。第一种是电子邮件地址字符串(ex 222@dsad.com),第二种是人名(John Doe)

我正在使用此查询来对数据进行排序,以便首先显示没有@cchar的行,然后显示具有它的行:

  SELECT * 
    FROM Name 
ORDER BY CASE 
           WHEN displayName LIKE '%@%' THEN 1 
           ELSE 2 
         END

所以我无法做的是让案例按升序排序,这样我就可以按照按字母升序排序的电子邮件,按字母升序排序。

2 个答案:

答案 0 :(得分:14)

使用:

  SELECT n.* 
    FROM NAME n
ORDER BY CASE 
           WHEN displayName LIKE '%@%' THEN 1 
           ELSE 2 
         END, n.displayname COLLATE NOCASE

ORDER BY子句支持多个列,但优先级从左到右读取。因此,其中带有“@”的displayname值位于顶部,然后按每个分组中的displayname值排序(基于CASE语句)。

您需要查看使用COLLATE operator进行不区分大小写的比较。

答案 1 :(得分:3)

基本上,它看起来像这样:

Select * 
FROM Name 
Order by case when displayName LIKE '%@%' then 1 else 2 end, displayName

您只是添加要排序到列表中的第二项。这将首先按1或2列排序,然后按实际名称对这些结果进行排序。

如果您的排序规则不允许您想要的排序,您可以稍微修改ORDER BY以适应这样:

Select * 
FROM Name 
Order by case when displayName LIKE '%@%' then 1 else 2 end, UPPER(displayName)