2012-12-01 12 views
7

私はソート

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

を記述する場合、それはのような日に基づいて結果を並べ替えます。金曜日、月曜日、そして先週の水曜日、 からの並べ替えが好きです。

ただし、曜日別に並べ替えると便利です。月曜日から日曜日まで。

答えて

3

TO_CHARの他の形式をご覧ください。 'fmDay'の代わりに 'D'を使用すると、1から7までの曜日が表示されます。その後、簡単に並べ替えることができます。

ここでの日付形式のリストです:http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements004.htm

+0

これは日曜日の開始日です。 –

4

あなたは文字列で注文しているので、あなたがあるためにそれを取得している(あなたは何から選択していないので、これは動作しないでしょう) 。

Dの曜日を作成するために使用されたformat modelで注文できましたが、日曜日は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で次のクエリを使用しました。 (週の任意の曜日で注文を開始するように変更します(たとえば、「月曜日」から「火曜日」に変更します)。)

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

CASE デイ= '日曜日BY * からクラス ORDERを選択し、1 日='月曜日THEN 2 WHEN日= '火曜日' THEN 3 いつ曜日= '水曜日' THEN 4 いつ曜日= '木曜日' THEN 5 いつ昼= '金曜日' THEN 6 01 = '土曜日の日は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

は、そのテーブルのユーザーのクラスと呼ばれるテーブルが(主キー)、クラス名、デイ

をCLASS_IDていてい