【问题标题】:MySQL order by column with letters and numbersMySQL 按字母和数字按列排序
【发布时间】:2016-12-16 00:44:36
【问题描述】:

我的表中有此列,其中包含货架名称

M2-8-3
N1-12-1 
N1-3-8 
N2-6-1 
O1-11-3
O2-1-5 
O2-10-1 
O2-10-2 
O2-10-6 
O2-16-7 
O2-17-6 
O2-17-7 
O2-4-2

当我按升序排序时,它会给出上面可见的结果,但是我如何编写查询以得到下面可见的结果

M2-8-3
N1-3-8 
N1-12-1 
N2-6-1 
O1-11-3
O2-1-5 
O2-4-2
O2-10-1 
O2-10-2 
O2-10-6 
O2-16-7 
O2-17-6 
O2-17-7 

区别在于N1-3-8O2-4-2的位置

【问题讨论】:

  • 让我澄清一下。想象一下字符串的 3 个组件,1=CHAR, 2= INT, 3=INT。按 1、2、3 排序,是吗?
  • 只需将其拆分为 3 个部分,将第 2 个和第 3 个部分转换为数字并按 part1、part2、part3 排序或使用字符串函数格式化前导零的数字并按格式化表达式排序跨度>

标签: mysql sql


【解决方案1】:

试试这个:

SELECT col
FROM yourTable
ORDER BY SUBSTRING_INDEX(col, '-', 1),
         SUBSTRING(SUBSTRING_INDEX(col, '-', -2),
                   1,
                   INSTR(SUBSTRING_INDEX(col, '-', -2), '-') - 1),
         SUBSTRING_INDEX(col, '-', -1)

这是蛮力方法,ORDER BY 子句中的三个术语中的每一个都对应于连字符字符串的一部分。

【讨论】:

    【解决方案2】:

    这可能是一个稍微简单的方法:

    order by substring_index(col, '-', 1),
             substring_index(col, '-', -2) + 0,
             col
    

    这最终将中间部分转换为数字以进行排序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-08
      • 1970-01-01
      • 2016-03-07
      • 1970-01-01
      相关资源
      最近更新 更多