为了账号安全,请及时绑定邮箱和手机立即绑定

MySQL‘Order by’-正确排序字母数字

MySQL‘Order by’-正确排序字母数字

繁花不似锦 2019-10-20 12:08:22
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 534G G46A 100B 100A 100JE等等.。谢谢!更新:要求查询的人select * from table order by name asc
查看完整描述

3 回答

?
四季花海

TA贡献1811条经验 获得超5个赞

人们用不同的技巧来做这件事。我在谷歌上搜索并发现了一些结果,每个结果都遵循不同的技巧。看看他们:

编辑:

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

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中的自然排序

给定输入


Table: sorting_test

 -------------------------- -------------

| alphanumeric VARCHAR(75) | integer 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 versionFROM version_sortingORDER BY CAST(version AS UNSIGNED), version;

希望这能帮上忙



查看完整回答
反对 回复 2019-10-21
?
SMILET

TA贡献1796条经验 获得超4个赞

就这么做吧:

SELECT * FROM table ORDER BY column `name`+0 ASC

附加+0将意味着:

0, 10, 11, 2, 3, 4

变成:

0, 2, 3, 4, 10, 11



查看完整回答
反对 回复 2019-10-21
  • 3 回答
  • 0 关注
  • 581 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信