2012-12-01 13 views
7

jeśli piszęSortuj według dni tygodnia od poniedziałku do niedzieli

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

Następnie sortuje wynik w oparciu o dzień jak; od piątku, a następnie od poniedziałku do środy podobnie jak sortowanie według znaków.

Ale chcę posortować go według dnia tygodnia; od poniedziałku do niedzieli.

Odpowiedz

4

Dostaniesz go w porządku jesteś, bo jesteś zamawiania przez ciąg (i to nie będzie działać, ponieważ nie jesteś wybierając z niczego) .

Można zamówić przez format model użyte do wygenerowania dzień tygodnia w postaci numerycznej, D, ale niedziela jest 1 w ten polecam korzystania mod() do tej pracy.

czyli zakładając tabelę

create table a (b date); 

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

to będzie działać:

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) 

Oto SQL Fiddle wykazać.

W twoim przypadku zapytanie staną:

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

Dlaczego komplikować, kiedy można dodać kolejną kolumnę z numerami 1-7 odpowiadających dni, a następnie sortować według tej kolumny ...

0

I właśnie napotkałem ten sam wymóg - aby zamówić wynik zapytania według dnia tygodnia, ale nie zaczynając od niedzieli. Użyłem następującej kwerendy w Oracle, aby rozpocząć w/poniedziałek. (Zmodyfikuj go, aby rozpocząć zamawianie w dowolnym dniu tygodnia, np. Zmień "PONIEDZIAŁEK" na "WTOREK".)

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

Lub:

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

SELECT * OD klas Zamów przez CASE Skoro dzień = 'Niedzieli', a następnie 1 Skoro dzień = 'poniedziałek', a następnie 2 Skoro dzień = "Wtorek" TO 3 KIEDY dzień = "środa" TO 4 KIEDY dzień = "czwartek" TO 5 KIEDY dzień = "piątek" TO 6 Skoro dzień = 'sobota', a następnie 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

przy założeniu, że użytkownik ma tabelę o nazwie klasy w tym użytkownikiem tabela ma class_id (klucz podstawowy), nazwa klasy, Dzień

Powiązane problemy