sql - 按字符串长度排序,然后按 pl sql 中的单个字母 desc 排序

标签 sql plsql

我有一组单字母和双字母需要订购。

Data : 
A
B
D
E
F
G
AL
BL
DL

Output :
AL
BL
DL
E
F
G
A
B
D

我可以通过查询得到以下结果

SELECT column_name
        FROM table_name
   ORDER BY LENGTH(column_name) desc, column_name asc;

AL
BL
DL
A
B
D
E
F
G

但是如何将 A B D 放在 E F G 之后

如有任何帮助,我们将不胜感激...

最佳答案

实现此目的的一种方法是根据字符串中的第一个字符使用有关最大长度的附加信息。因此,'A' 的值为 2,'G' 的值为 1:

SELECT column_name
FROM (select t.*,
             max(length(column_name)) over (partition by substr(column_name, 1, 1)) as fclen
      from table_name t
     ) t
ORDER BY LENGTH(column_name) desc,
         (case when fclen = 1 then 1 else 0 end) desc,
         column_name asc;

关于sql - 按字符串长度排序,然后按 pl sql 中的单个字母 desc 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25643011/

相关文章:

sql - 使名称全部大写?

mysql - Multi-Tenancy 数据库,每个表上都有租户 ID

sql - 获取 SQL 表列的总和,直到总和达到 5000

sql - 无法在 PL/SQL 中运行 hello world

sql - Teradata 中减和除外的区别

xml - 带有子查询的 Oracle 数据透视表

mysql - 返回该月的最后一天

sql - PLS-00103 : Encountered the symbol when expecting one of the following:

sql - PL/SQL 是否具有与 Java 等效的 StringTokenizer?

oracle - plsql存储过程采用参数给出错误