开发者社区> 问答> 正文

MySQL'Order By'-正确排序字母数字

我想按下面显示的顺序对它们进行排序(数字1-12):

1个 2 3 4 5 6 7 8 9 10 11 12 但是,我的查询-使用order by xxxxx asc按其他所有字母开头的数字排序:

1个 10 11 12 2 3 4 5 6 7 8 9 有什么技巧可以使其更正确地排序吗?

此外,为了充分公开,这可以是字母和数字的混合(尽管现在不是),例如:

A1 534克 G46A 100B 100A 100JE 等等....

谢谢!

展开
收起
保持可爱mmm 2020-05-10 19:50:42 755 0
1 条回答
写回答
取消 提交回答
  • 人们使用不同的技巧来做到这一点。我搜索了一下,发现每个结果都遵循不同的技巧。看看他们:

    MySQL中的字母数字排序 MySQL中的自然排序 数字值与字母数字值混合排序 MySQL自然排序 MySQL中的自然排序 编辑:

    我刚刚为以后的访问者添加了每个链接的代码。

    MySQL中的字母数字排序

    给定输入

    1A 1a 10A 9B 21C 1C 1D 预期产量

    1A 1C 1D 1a 9B 10A 21C 询问

    Bin Way

    SELECT tbl_column, BIN(tbl_column) AS binray_not_needed_column FROM db_table ORDER BY binray_not_needed_column ASC , tbl_column ASC


    Cast Way

    SELECT tbl_column, CAST(tbl_column as SIGNED) AS casted_column FROM db_table ORDER BY casted_column ASC , tbl_column ASC MySQL中的自然排序

    给定输入

    表:sorting_test


    | 字母数字VARCHAR(75)| 整数INT |


    | test1 | 1 | | test12 | 2 | | test13 | 3 | | test2 | 4 | | test3 | 5 |


    预期产量


    | alphanumeric VARCHAR(75) | integer INT |


    | test1 | 1 | | test2 | 4 | | test3 | 5 | | test12 | 2 | | test13 | 3 |


    询问

    SELECT alphanumeric, integer FROM sorting_test ORDER BY LENGTH(alphanumeric), alphanumeric
    数字值与字母数字值混合排序

    给定输入

    2a, 12, 5b, 5a, 10, 11, 1, 4b 预期产量

    1, 2a, 4b, 5a, 5b, 10, 11, 12 询问

    SELECT version FROM version_sorting ORDER BY CAST(version AS UNSIGNED), version; 希望这可以帮助

    2020-05-10 19:50:55
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
One Box: 解读事务与分析一体化数据库 HybridDB for MySQL 立即下载
One Box:解读事务与分析一体化数据库HybridDB for MySQL 立即下载
如何支撑HTAP场景-HybridDB for MySQL系统架构和技术演进 立即下载

相关镜像