Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > mysql varchar字符串按照数字排序

mysql中如何用varchar字符串按照数字排序

作者:ElenaYu

这篇文章主要介绍了mysql中用varchar字符串按照数字排序方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

mysql用varchar字符串按照数字排序

问题

对mysql数值字符串类型进行排序,在默认情况下使用order by 字段名称 desc/asc 进行排序的时候,mysql进行的排序规则是按照ASCII码进行排序的,并不会自动的识别出这些数据是数值。

如:

L1,L2,L3…L10,L11排序,按照常规的 desc/asc 进行排序,结果为:L1,L10,L11,L2,L3…table:

执行sql:

select * from test order by score asc; 

结果为:

期望:按照L1,L2,L3…L10,L11…的顺序排序

解决

方法1:

select * from test order by score-0 asc;

方法2:

select * from test order by cast(score as signed ) asc;

方法3:

select * from test order by convert(score,signed) asc;

方法4(亲测有效):

select * from test order by substr(score from 2)-0 asc;

以上方法,查询结果为:

问题解决!

mysql按数值大小排序varchar字段

select * from table_name where 1 order by meta_value DESC;  一般用法,当排序varchar类型的数字内容时就会出现问题;
select * from table_name where 1 order by --meta_value DESC;  这样就会按照数字的大小排序了。

问题是这样的,当我们按由大到小的顺序排序一组数字的时候,

它应该如此:

但如果是这些数字是以varchar类型存储的话,

直接排序的结果会是这样:

解决方案1:

当然多数情况下我们会把数字存储为数字型,就可避免这一问题。但还是有一些情形,数字被存储为varchar。

解决方案2:

- meta_value ASC 此时采用的是按meta_value的负值排序,所以如需得到由大到小的效果,需要使用ASC而非DESC。

当然也可以直接用

--meta_value DESC ​​​​​​​

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文