Mysql实现字符位数及字符大小升序排序
当我们需要对某一字段进行升序排序的时候,如果这个字段是字符类型的数据,排序时会去逐位比较字符,例如:
'1234’和’21’两个字符串,按照惯性思维,肯定是’21’排在前面,但是由于字符类型数据比较时会逐位比较,所以,应当是‘1234’排在前面。那么,怎么才能让‘21’排在前面呢?
有两种实现方式:
一、先进行位数排序,再进行字符排序:
select dict_no, dict_name from dictionary order by length(dict_no), dict_no asc;
多个排序条件,会按照第一个排序排序条件为基准排序,即先按照dict_no的长度进行排序,当dict_no长度一致的时候,会按照第二个排序条件进行排序,即字符。
二、将dict_no转化为数字类型,再进行排序:
select dict_no, dict_name from dictionary order by cast(dict_no as decimal) asc;
这种方式适用于纯数字字符串。当字符串为‘21abd’和’21ab’时,这种排序方式便失去了作用,无法对这两个字符进行比较,因为转化成数字后都是21。