0

我在 mysql 数据库中有一些值,当使用 ORDER BY ASC 时,它们会像这样显示

178mm Diamond Core Drill
187mm Diamond Core Drill
22mm Diamond Core Drill
28mm Diamond Core Drill
32mm Diamond Core Drill

这是由于第一个数字的顺序。什么时候真的应该是这样的

22mm Diamond Core Drill
28mm Diamond Core Drill
32mm Diamond Core Drill
178mm Diamond Core Drill
187mm Diamond Core Drill

有没有办法只通过字符串中的第一个完整数字对字段进行排序,例如 22、28、32 等...

干杯。

4

2 回答 2

0

ORDER BY column+0正如@Strawberry 在评论中所建议的那样有效。

但就我自己而言,我更喜欢明确CAST的代码自我文档(这将防止将来有人删除“无意义” +0 来“优化”您的代码;):

mysql> SELECT c,CAST(c AS DECIMAL),c+0 from T order by CAST(c AS DECIMAL) ASC;
+--------------------------+--------------------+------+
| c                        | CAST(c AS DECIMAL) | c+0  |
+--------------------------+--------------------+------+
| 22mm Diamond Core Drill  |                 22 |   22 |
| 28mm Diamond Core Drill  |                 28 |   28 |
| 32mm Diamond Core Drill  |                 32 |   32 |
| 178mm Diamond Core Drill |                178 |  178 |
| 187mm Diamond Core Drill |                187 |  187 |
+--------------------------+--------------------+------+
5 rows in set, 15 warnings (0.00 sec)

请注意这将产生警告 1292 "Truncated incorrect ... value

于 2013-07-09T15:06:52.610 回答
0

假设列名为 product_name(列大小为 100),表名为 products。怎么样

SELECT product_name FROM products ORDER BY LPAD(TRIM(product_name),100,'0') ASC ? 
于 2013-07-09T19:23:22.363 回答