sql - 按 desc 排序顺序未按预期工作

标签 sql oracle oracle11g sql-order-by

我在 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.

最佳答案

我在这里看到您订购的两个问题。首先是括号符号在字典上小于字母数字字符,这与您想要的不一致。其次是您的书名存在区分大小写的问题。这导致 sBoxWeb 出现更大的字典序,即使从不区分大小写的角度来看,前一个字母在字母表中出现的更早。

获得所需顺序的一种方法是使用两个条件。第一个条件将以字母数字标题开头的书名与以括号等符号开头的书名分开。第二个条件按实际书名使用不区分大小写的排序。

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/

相关文章:

mysql - 跨连接表求和

java - 如何解决 Java 代码中的 ORA-01795

sql - 加入 Oracle : Which field on which side of an = sign?

php - 检索搜索结果 | PHP 和 SQL

mysql - 由于错误代码 1054,无法插入记录

Oracle:加入或简单的 from/where 子句对性能没有影响吗?

ubuntu - 删除在安装 oracle 11g 时创建的符号链接(symbolic link)/usr/bin/awk/bin/awk

select - 如何列出可通过数据库链接访问的表?

java - 如何将 SQL(嵌套子查询)转换为 QueryBuilder 创建的查询

sql - 从下表获取唯一集的最佳 SQL 查询