首页 > 解决方案 > 按自定义模式排序列

问题描述

我正在尝试订购发票数据列。发票编码字段由以下部分组成:

  1. 大写字母(例如 AZ)
  2. 实际年份(例如 19)
  3. 反斜杠 (/)
  4. 发票号码(例如 100)

真实示例:F19/1234

此时我正在使用以下查询按发票编码订购

select * from `invoices` 
order by LENGTH(codification) desc, `codification` desc 

这适用于 2019 年的发票,问题是 2020 年的发票编号重置为 0,因此此订购失败。

现在我有以下

关于如何按年份和发票编号降序排列的任何想法?

我试图通过 REGEX_SUBSTRING 订购,但这不起作用,我认为这个查询什么都不做......

select * from `invoices` 
order by REGEXP_SUBSTR(`codification`, '[0-9]+(?=\/)') desc, REGEXP_SUBSTR(`codification`, '([a-z0-9_-]*[\/]?)$') desc

我想要完成的订单是(按年份和发票编号递减)

标签: mysqlsql

解决方案


我认为这会起作用:

order by codification desc

当 2020 年的发票数量超过 10 个时,您将遇到问题。处理:

order by substring_index(codification, '/', 1),
         substring_index(codification, '/', -1) + 0

推荐阅读