2013-04-27 2 views
0

Я пытаюсь изучить sql, и у меня есть вопрос. Как я могу упорядочить вывод логическим порядком дней? Например, я хочу, чтобы люди были заказаны с HIREDAY с понедельника до воскресенья.SQL-запрос по заявлению

select first_name, 
TO_CHAR(hire_date,'Day') as "HIREDAY" 
from employees 
order by HIREDAY; 

ВЫВОД:

Daniel Friday 
Ismael Friday  
Gerald Monday 
Renske Monday 
Jason Monday 
Vance Saturday 
Jenni Saturday 
Michael Saturday 
John Sunday 
James Sunday 
Matthew Sunday 
Payam Thursday 
Irene Thursday 
Michael Tuesday 
Kevin Tuesday 
Anthony Wednesday 
Karen Wednesday 

ответ

1

Вы можете сделать это, используя case заявление:

order by (case when trim(Hire_Day) = 'Monday' then 1 
       when trim(Hire_Day) = 'Tuesday' then 2 
       when trim(Hire_Day) = 'Wednesday' then 3 
       when trim(Hire_Day) = 'Thursday' then 4 
       when trim(Hire_Day) = 'Friday' then 5 
       when trim(Hire_Day) = 'Saturday' then 6 
       when trim(Hire_Day) = 'Sunday' then 7 
      end) 

В Oracle, вы можете также использовать DAYOFWEEK():

order by DAYOFWEEK(hire_date) 

Или заказ по to_char (Hire_Day, 'D')

+0

Я использую оракул, но не распознает будний день() – Teo

+0

@ Theo. , , Он хорошо документирован в Oracle (http://docs.oracle.com/cd/E17952_01/refman-5.1-en/date-and-time-functions.html#function_weekday), и я уверен, что он был в многие прошлые версии. –

+0

И еще одна вещь, утверждение случая не упорядочивает дни правильно ... Я не могу понять, почему – Teo

0

Попробуйте это: выберите first_name to_char ((hire_date), 'FMD') "День" от сотрудников заказ на "День";

В этом случае вы получите правильный порядок дней в номере. В вашем случае от to_char имя дня было упорядочено по алфавиту, что не требуется.

+0

Это не обязательно будет делать заказ в понедельник сначала, как я объясню в дубликате ... (также 'fm' тоже не нужно). – Ben

Смежные вопросы