sql server針對字符串型數字排序(針對此字符串的長度不一致)


對於不規則的字符串數字排序,無法按照數字大的大小排序的原因是,字符串數字在數據庫中按照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碼排序


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM