對於不規則的字符串數字排序,無法按照數字大的大小排序的原因是,字符串數字在數據庫中按照ASCII碼排序,從字符的第一個數字對比,首先就會將為首個數字相同的排在一起,在從這些字符串里面對比第二個數字,如下:
一組字符串為 ‘1’,‘2’,'10','11','3';
不做任何處理的排序:‘1’,'10','11','2','3';
解決方法1:
格式:
order by 字段名稱+數字 的形式進行排序
或者 order by 字段名稱*乘以數字的形式進行排序 此時就會按照字符串中的數字排序
select * from table1 order by aa+1
或者 select * from table1 order by aa*1
原理:猜想是‘+’或‘*’一個數字之后就會將字符串的數字變為‘+’或‘*’后面數字的類型,此處就會變成int類型。具體的真實原理希望各位能提供
注:數字為0或1測試有效,其它的數字未測試,MYSql同樣適用
解決方法2:
select * from table1 order by len(aa),aa
原理:將長度一致的字符串先排序,再按照字符串的ASCII碼排序