我在 SQL 中有这个查询
SELECT Book FROM Library ORDER BY Book desc
我想要的排序
[Expired]Web Publishing Co., Ltd.
[Expired]sBox Co.,Ltd
[Expired]mTertainment
wwww
但结果显示如下
wwww
[Expired]sBox Co.,Ltd
[Expired]mTertainment
[Expired]Web Publishing Co., Ltd.
最佳答案
我在这里看到您订购的两个问题。首先是括号符号在字典上小于字母数字字符,这与您想要的不一致。其次是您的书名存在区分大小写的问题。这导致 sBox
比 Web
出现更大的字典序,即使从不区分大小写的角度来看,前一个字母在字母表中出现的更早。
获得所需顺序的一种方法是使用两个条件。第一个条件将以字母数字标题开头的书名与以括号等符号开头的书名分开。第二个条件按实际书名使用不区分大小写的排序。
SELECT Book
FROM Library
ORDER BY CASE WHEN REGEXP_LIKE(SUBSTR(Book, 1, 1), '[^A-Za-z0-9]') THEN 0 ELSE 1 END,
LOWER(Book) DESC
实际上,也许更准确的处理方法是检查书名是否以任何带括号的标签开头,即
^[.*]
:ORDER BY CASE WHEN REGEXP_LIKE(Book, '^[[].*[]]') THEN 0 ELSE 1 END,
LOWER(Book) DESC
关于sql - 按 desc 排序顺序未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41140148/