1. 程式人生 > 資料庫 >Oracle用decode函式或CASE-WHEN實現自定義排序

Oracle用decode函式或CASE-WHEN實現自定義排序

1 問題

SQL排序,只要在order by後面加欄位就可以了,可以通過加descasc來選擇降序或升序。但排序規則是預設的,數字、時間、字串等都有自己預設的排序規則。有時候需要按自己的想法來排序,而不是按欄位預設排序規則。

比如欄位值為英文欄位:MondayTuesdayWednesday等,如果按欄位預設排序規則就為:

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實現自定義排序內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!