首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql Order By字符串,包含由字母组成的数字

问Mysql Order By字符串,包含由字母组成的数字
EN

Stack Overflow用户
提问于 2013-07-09 22:29:47
回答 2查看 228关注 0票数 0

我在mysql数据库中有一些值,当使用ORDER BY ASC时,它们显示如下

代码语言:javascript
复制
178mm Diamond Core Drill
187mm Diamond Core Drill
22mm Diamond Core Drill
28mm Diamond Core Drill
32mm Diamond Core Drill

这是由于第一个数字的排序所致。实际上应该是这样的

代码语言:javascript
复制
22mm Diamond Core Drill
28mm Diamond Core Drill
32mm Diamond Core Drill
178mm Diamond Core Drill
187mm Diamond Core Drill

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

干杯。

EN

回答 2

Stack Overflow用户

发布于 2013-07-09 23:06:53

@Strawberry works在评论中建议的ORDER BY column+0。

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

代码语言:javascript
复制
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!

票数 0
EN

Stack Overflow用户

发布于 2013-07-10 03:23:22

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

代码语言:javascript
复制
SELECT product_name FROM products ORDER BY LPAD(TRIM(product_name),100,'0') ASC ? 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17550914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档