我的表中包含两种类型的文本。第一种是电子邮件地址字符串(ex 222@dsad.com),第二种是人名(John Doe)
我正在使用此查询来对数据进行排序,以便首先显示没有@cchar的行,然后显示具有它的行:
SELECT *
FROM Name
ORDER BY CASE
WHEN displayName LIKE '%@%' THEN 1
ELSE 2
END
所以我无法做的是让案例按升序排序,这样我就可以按照按字母升序排序的电子邮件,按字母升序排序。
答案 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)