首页 新闻 会员 周边 捐助

DB2查询结果排序问题

0
[已解决问题] 解决于 2017-12-28 15:10

根据表中的一个varchar类型字段排序。

该字段值:1 2 3 4 5 6 7 8 9 10

经过使用 order by 该字段后,结果却成了:1 10 2 3 4 5 6 7 8 9

请问大神,这种情况该怎么解决。?

丿少女梦丶的主页 丿少女梦丶 | 初学一级 | 园豆:172
提问于:2017-12-28 14:55
< >
分享
最佳答案
0

字符串排序结果就是这样的。

奖励园豆:5
西漠以西 | 小虾三级 |园豆:1675 | 2017-12-28 15:02

数据库不是我设计的,无法改,请问这个怎么可以避免。

丿少女梦丶 | 园豆:172 (初学一级) | 2017-12-28 15:04

@--麻辣小龙虾!: 

那只能把这个varchar字段的值转成int,再排啊。但是性能会差一个数量级。

西漠以西 | 园豆:1675 (小虾三级) | 2017-12-28 15:08

@西漠以西: 好吧,谢了!

丿少女梦丶 | 园豆:172 (初学一级) | 2017-12-28 15:09
其他回答(2)
0

字段用int类型

顾星河 | 园豆:7281 (大侠五级) | 2017-12-28 14:56

知道int可以,数据库设计不改,怎么正确排序

支持(0) 反对(0) 丿少女梦丶 | 园豆:172 (初学一级) | 2017-12-28 15:04
0

手动转换类型:

用下面的方法就可以了,使server_id+0之后再排序,问题解决了。

select server_id from cardserver where game_id = 1 order by server_id+0 desc limit 10;

+-----------+
| server_id |
+-----------+
| 10        | 
| 8         | 
| 7         | 
| 6         | 
| 5         | 
| 4         | 
| 3         | 
| 2         | 
| 1         | 
+-----------+

 

使用MySQL函数CAST/CONVERT:

mysql为我们提供了两个类型转换函数:CAST和CONVERT,现成的东西我们怎能放过?

CAST() 和CONVERT() 函数可用来获取一个类型的值,并产生另一个类型的值。
这个类型 可以是以下值其中的 一个:
BINARY[(N)]
CHAR[(N)]
DATE
DATETIME
DECIMAL
SIGNED [INTEGER]
TIME
UNSIGNED [INTEGER]

所以我们也可以用CAST解决问题:

select server_id from cardserver where game_id = 1 order by CAST(server_id as SIGNED) desc limit 10;

也可以使用CONVERT来搞定此问题:

select server_id from cardserver where game_id = 1 order by CONVERT(server_id,SIGNED) desc limit 10;
 
以上三种,你试试看呢
Coin lee | 园豆:204 (菜鸟二级) | 2017-12-29 10:58
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册