我在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等......
干杯。
答案 0 :(得分:0)
@Strawberry评论中建议的ORDER BY column+0
有效。
但是,就我自己而言,我更喜欢明确的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
!
答案 1 :(得分:0)
假设列名为product_name(列大小为100),表称为产品。 <怎么样
SELECT product_name FROM products ORDER BY LPAD(TRIM(product_name),100,'0') ASC ?