order by排序出现问题

我们使用order by对字段进行排序的时候,我们发现排完后并不是按照我们要求的进行升序或者降序,出现排序错误:
例如:select * from app_mobile_device lo order by lo.romtype desc; 我用order by 倒序排序romtype,结果发现36.1比120尽然大,查询结果如下图所示:
在这里插入图片描述
按照正常的order by 字段,这样排序的不对,原因是你排序的字段类型是varchar类型,不是number类型
romtype列肯定是非数值型的,所以他排序的时候会按照字符串排序方式;1开头的字符串排在前面,排完了,然后才开始排2开头的字符串,3、4、5往后面推;
如果你想要按照数字排序,先要把字符串转换成数字格式;
第一种解决方式:
如果是sqlserver数据库的话, order by convert(int,romtype) ASC或者order by cast(romtype as int) ASC
如果是oracle数据库的话就用order by to_number(romtype) ASC;
第二种解决方式:
用字段加0,这样字段就转成int类型了
例如:
select * from app_mobile_device lo order by (lo.romtype+0) desc

猜你喜欢

转载自blog.csdn.net/shiAndyuanfang/article/details/84966404