需求:
在實際項目需求中可能會遇到這種情況:需要從數據庫中獲取某些數據,然後在前端通過列表的形式展現出來,但是展現的列表需要根據某個字段進行排序,而這個字段的內容又是由字符和數字組合而成的,那麼應該如何根據數字進行排序呢?
思路一:
從數據庫獲取數據的同時通過order by來控制需要排序的字段,這樣會默認根據數字進行排序,但是存在的問題是會先取數字的第一位按從大到小進行排序,然後取第二位進行排序,以此類推,排序效果(1,10,20.....2,20,21...),即不是比較整體數字的大小進行排序的。
那麼如何解決呢?因爲相同位數的數字排序是正常的,我們需要解決的是不同位數的數字排序,因此我們先按照數字的長度進行排序後再按照數字大小進行排序就可以了。即:select * from 表名 order by length(要排序的字段) 要排序的段
例:select * from user order by length(name) name;
思路二:
出現第一種情況的原因是因爲排序的對象類型是字符串,如果是對數字進行排序的話就可以按照真實的數字大小進行排序了。
因此我們需要將字符和數字混合的字段中的數字部分截取出來,然後轉換成數字類型再進行排序就可以了。
即:select * from 表名 order by cast(substr(字段名,截取的長度) as number) 【cast函數是類型轉換函數,substr是字符串截取函數】
例:select * from user order by cast(substr(name, 5) as number);
注意:上述SQL語句是在Oracle數據庫測試的,其它數據庫函數寫法或有不同。