查询时根据字符串进行整数排序

如:数据库table表中有一个varchar字段code

table表中有5条数据,要想在查询时根据code的整数大小排序,

可: select t.code from table t order by cast(code as integer)

 

如果排序字段code格式如:A1,A2。。。A10,A11这种字符加数字的形式,那么排序结果将不会是理想状态下的:

A1,A2,。。。A10,A11这种结果,而会是A1,A10,A11...A2这样的结果

显然,这不是我们要的结果,此时,我们需要对该字段进行操作,操作如下:

select * from table order by mid(code,2,10) + 1

mid()第一个参数是字串内容,可以是字段名。第二个参数是起始字符的位置,我这里需要从第二个字符开始。第三个参数是需要取得的长度,要选一个可以包含所有字段内容长度的值,宁大勿小。
但这样取出来的还只是“数字内容的字符串”,对它排序仍然使用字符规则,不会得到我们想要的结果。
这时需要给这个结果再加上一个数值,让MySQL对它进行一次算术运算,然后得到的就是一个整型值,这时再排序就是数字顺序的结果了。

你可能感兴趣的:(查询时根据字符串进行整数排序)