我在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等……
干杯。
发布于 2013-07-09 23:06:53
@Strawberry works在评论中建议的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!
发布于 2013-07-10 03:23:22
假设列称为product_name (列大小为100),表名为products。怎么样
SELECT product_name FROM products ORDER BY LPAD(TRIM(product_name),100,'0') ASC ? https://stackoverflow.com/questions/17550914
复制相似问题