Oracle用decode函式或CASE-WHEN實現自定義排序
阿新 • • 發佈:2020-05-28
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實現自定義排序的文章就介紹到這了,更多相關Oracle用decode函式或CASE-WHEN實現自定義排序內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!