oracle數據庫中,關於數組字母摻雜的情況進行的優化排序

日常工作中,我們可能會碰見比較特殊的數據,比如數組和字母摻雜的情況,我們也要對他們進行排序,並且按照我們想要的方式排序下來:接下來我就要介紹的是我碰見的情況,並考慮如何優化的,因爲是公司的數據,我就不貼圖了,我把大致的類型弄出來,記錄一下,以備將來用得上。

1、當前綴相同時,例如數據類似A1、A10、A2、A20、B2、B12(開頭也不一定是字母,可以是字符串)

假如這一列名稱是name_value,我們想要的結果是

A1、A2、A10、A20、B2、B12

如果是直接排序的話,是行不通的,所以我們需要處理一下,先對name_value排序,再對name_value的長度排序。

select name_value from table
order by name_value,length(name_value)

2、當遇到數據類似2A、45A、155A、1.25B、2.5B、10B、50B(此方法適用於尾部必須是字母)

假設這一列名稱爲name_value,首先先對尾字母排序  用substr函數,substr(name_value, -1)就截取出最後一個字母了對這個進行排序就行了。接着就想辦法把這個字母幹掉然後接着排序,用這個函數,當然要注意大小寫,這個是區分大小寫的regexp_replace(name_value,'[A-Z]'),去掉之後排序還是不行的,因爲現在的數據不是數字類型,所以這裏面的比如處理過後的2與2.5就沒法比較出正確的結果,所以還需將處理過的結果轉換成數字cast(regexp_replace(name_value,'[A-Z]') as int)

最終是oracle語句是

select name_value from table 
order by sybstr(name_value,-1),cast(regexp_replace(name_value,'[A-Z]') as int)

完美解決,真是方便舒心。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章