您好,登錄后才能下訂單哦!
這篇文章主要講解了Oracle用decode函數或CASE-WHEN實現自定義排序的方法,內容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。
1 問題
對SQL
排序,只要在order by
后面加字段就可以了,可以通過加desc
或asc
來選擇降序或升序。但排序規則是默認的,數字、時間、字符串等都有自己默認的排序規則。有時候需要按自己的想法來排序,而不是按字段默認排序規則。
比如字段值為英文字段:Monday
、Tuesday
、Wednesday
等,如果按字段默認排序規則就為:
Friday
Monday
Saturday
Sunday
Thursday
Tuesday
Wednesday
實際我需要的是:
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
2 decode函數
通過decode
函數可以實現,如下:
select * from table_date order by decode(DateStr, 'Monday',1 'Tuesday',2 'Wednesday',3 'Thursday',4 'Friday',5 'Saturday',6 'Sunday',7, 0);
后面的數字可以不連續。
3 case when語句
另外,還可以用case when
來實現:
select * from table_date order by (CASE DateStr WHEN 'Monday' then 1 WHEN 'Tuesday' then 2 WHEN 'Wednesday' then 3 WHEN 'Thursday' then 4 WHEN 'Friday' then 5 WHEN 'Saturday' then 6 WHEN 'Sunday' then 7 ELSE 0 END);
4 總結
當然,把字段直接賦值為對應的數字效率會高很多,通過另外一張表再建立映射關系。
看完上述內容,是不是對Oracle用decode函數或CASE-WHEN實現自定義排序的方法有進一步的了解,如果還想學習更多內容,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。