Bạn nhận được nó theo thứ tự như bạn đang có bởi vì bạn đang sắp xếp theo một chuỗi (và điều này sẽ không hoạt động vì bạn không chọn từ bất kỳ thứ gì).
Bạn có thể sắp xếp theo mô hình định dạng được sử dụng để tạo ngày trong tuần ở dạng số, D
, nhưng vì Chủ nhật là ngày 1 nên tôi khuyên bạn nên sử dụng mod()
để làm cho điều này hoạt động.
tức là giả sử bảng
create table a ( b date );
insert into a
select sysdate - level
from dual
connect by level <= 7;
Điều này sẽ hoạt động:
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)
Đây là một SQL Fiddle để chứng minh.
Trong trường hợp của bạn, truy vấn của bạn sẽ trở thành:
select ename, to_char(hiredate,'fmDay') as "Day"
from my_table
order by mod(to_char(hiredate, 'D') + 5, 7)