2014-12-10 3 views
-1
SELECT last_name, hire_date, 
     TO_CHAR(LAST_DAY(hire_date),'DAY') AS "Day" 
FROM employees 
ORDER BY (CASE TO_CHAR(LAST_DAY(hire_date),'DAY') 
       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 

      END) DESC 

Мне нужно разобраться в первый день недели Понедельник, Вторник, Среда и т. Д., Но мой результат начинается только с понедельника из-за ключевого слова DESC, а затем его случайных пятниц, вторника, четверга и так далее. Его написанное, как дерьмо, я знаю, но как его исправить полностью?заказать в первый день недели oracle

+1

* Вы вероятно * хотите переместить это выражение CASE, в ЗЕЬЕСТ, дать ему псевдоним, и Поручения псевдоним. –

+1

Попробуйте изменить футляр на 'TO_CHAR (LAST_DAY (hiredate), 'fmD')' См. Здесь http://www.techonthenet.com/oracle/functions/to_char.php – ChrisStillwell

+0

Это очень похоже на этот вопрос, http: //stackoverflow.com/questions/16478112/oracle-sql-sort-week-days-by-current-day –

ответ

1

Когда вы сделаете свой заказ, используйте TO_CHAR(hire_date, 'D')

Это присвоит воскресенье в первый день недели.

Вы можете использовать расшифровывает отправить воскресенье к концу рода:

select * 
from 
employees 
ORDER BY DECODE(to_char(hire_date, 'D'), 1, 8, to_char(hire_date, 'D')) 

1/6/2014 MONDAY 
1/20/2014 MONDAY 
1/27/2014 MONDAY 
1/13/2014 MONDAY 
1/28/2014 TUESDAY 
1/14/2014 TUESDAY 
1/7/2014 TUESDAY 
1/21/2014 TUESDAY 
1/22/2014 WEDNESDAY 
1/1/2014 WEDNESDAY 
1/15/2014 WEDNESDAY 
1/8/2014 WEDNESDAY 
1/29/2014 WEDNESDAY 
1/2/2014 THURSDAY 
1/16/2014 THURSDAY 
1/9/2014 THURSDAY 
1/23/2014 THURSDAY 
1/30/2014 THURSDAY 
1/24/2014 FRIDAY 
1/31/2014 FRIDAY 
1/10/2014 FRIDAY 
1/3/2014 FRIDAY 
1/17/2014 FRIDAY 
1/11/2014 SATURDAY 
1/18/2014 SATURDAY 
1/25/2014 SATURDAY 
1/4/2014 SATURDAY 
1/12/2014 SUNDAY 
1/19/2014 SUNDAY 
1/26/2014 SUNDAY 
1/5/2014 SUNDAY 
Смежные вопросы