【问题标题】:MySQL order varchar alpha-numericallyMySQL按字母数字顺序排列varchar
【发布时间】:2013-01-19 03:32:55
【问题描述】:

给定一个名为 title 的 VARCHAR 列,其结果如下:SELECT title FROM table ORDER BY title

Alpha 11
Alpha 2
Beta 1
Beta 11
Beta 2

我希望这是“正确”的顺序

Alpha 2
Alpha 11
Beta 1
Beta 2
Beta 11

有没有办法做到这一点?

【问题讨论】:

  • 改变你的表格,让它有两列,Field1 包含 ALPHABETA,.. 和 Field2 包含数字部分.现在您可以轻松地对其进行排序,ORDER BY Field1 ASC, Field2 ASC 变得更轻松。

标签: mysql sql select sql-order-by


【解决方案1】:

试试这个:

SELECT title ,
  SUBSTRING_INDEX(title, '', 1) as title_str,
  SUBSTRING_INDEX(title, ' ', -1) + 0 as title_num
FROM table 
ORDER BY title_str, 
  title_num

【讨论】:

    【解决方案2】:

    这称为自然顺序排序。不幸的是,MySQL 没有内置这样的排序算法,所以你最可靠的选择是创建一个 UDF 来为你做这件事。

    不过,this question 有一个有趣的答案:

    这是一个快速的解决方案:

    SELECT title
    FROM table
    ORDER BY LENGTH(title), title
    

    【讨论】:

      【解决方案3】:

      试试这个:

      SELECT title 
      FROM tablename 
      ORDER BY SUBSTRING_INDEX(title, ' ', 1), 
               CAST(SUBSTRING_INDEX(title, ' ', -1)  AS UNSIGNED);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多