2012-12-01 270 views
7

如果我寫排序星期從週一到週日

select ename, to_char(hiredate,'fmDay') as "Day" order by "Day"; 

然後排序根據白天喜歡的結果;從星期五,然後星期一和上星期三, 喜歡按字符排序。

但我想按星期幾排序;從週一到週日。

回答

4

你得到它的順序你是因爲你是一個字符串排序(這是行不通的,因爲你沒有任何東西,從選擇) 。

您可以通過format model訂購以用於創建星期幾的數字形式D,但由於星期天是1,因此我建議使用mod()來完成此項工作。

即假設表

create table a (b date); 

insert into a 
select sysdate - level 
    from dual 
connect by level <= 7; 

這會工作:

select mod(to_char(b, 'D') + 5, 7) as dd, to_char(b, 'DAY') 
    from a 
order by mod(to_char(b, 'D') + 5, 7) 

這裏有一個SQL Fiddle證明。

你的情況,你的查詢將變成:

select ename, to_char(hiredate,'fmDay') as "Day" 
    from my_table 
order by mod(to_char(hiredate, 'D') + 5, 7) 
1

爲什麼要複雜化時,你可以通過排序此列對應於天數1-7添加另一列,然後...

0

我剛剛遇到相同的要求 - 在一週中的某一天訂購查詢結果,但不是從星期天開始。我在Oracle中使用以下查詢來啓動w/Monday。 (修改它以開始一週中的任何一天的訂購,例如,將'MONDAY'更改爲'TUESDAY'。)

SELECT ename, to_char(hiredate, 'fmDAY') AS "Day" 
FROM emp 
ORDER BY (next_day(hiredate, 'MONDAY') - hiredate) DESC 

或者:

SELECT ename, to_char(hiredate, 'fmDAY') AS "Day" 
FROM emp 
ORDER BY (hiredate - next_day(hiredate, 'MONDAY')) 
0

選擇 * FROM 類 ORDER BY CASE 當白天= '星期天',那麼1 當白天= '星期一',那麼2 當白天='Tuesday'THEN 3 當日='星期三'那麼4 當日='星期四'那麼5 當日='星期五'那麼6 該表中用戶當白天= '星期六' THEN 7 END ASC

SELECT 
 
    * 
 
FROM 
 
    classes 
 
ORDER BY 
 
    CASE 
 
      WHEN Day = 'Sunday' THEN 1 
 
      WHEN Day = 'Monday' THEN 2 
 
      WHEN Day = 'Tuesday' THEN 3 
 
      WHEN Day = 'Wednesday' THEN 4 
 
      WHEN Day = 'Thursday' THEN 5 
 
      WHEN Day = 'Friday' THEN 6 
 
      WHEN Day = 'Saturday' THEN 7 
 
    END ASC

假設用戶已經被稱爲表的類已經類標識碼(主鍵),類名,

相關問題