如果我寫排序星期從週一到週日
select ename, to_char(hiredate,'fmDay') as "Day" order by "Day";
然後排序根據白天喜歡的結果;從星期五,然後星期一和上星期三, 喜歡按字符排序。
但我想按星期幾排序;從週一到週日。
如果我寫排序星期從週一到週日
select ename, to_char(hiredate,'fmDay') as "Day" order by "Day";
然後排序根據白天喜歡的結果;從星期五,然後星期一和上星期三, 喜歡按字符排序。
但我想按星期幾排序;從週一到週日。
看看其他格式的TO_CHAR
。而不是'fmDay'使用'D',它會給你從1到7的星期幾。然後你可以很容易地對它進行排序。
這裏的日期格式列表:http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements004.htm
你得到它的順序你是因爲你是一個字符串排序(這是行不通的,因爲你沒有任何東西,從選擇) 。
您可以通過format model訂購以用於創建星期幾的數字形式D
,但由於星期天是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-7添加另一列,然後...
我剛剛遇到相同的要求 - 在一週中的某一天訂購查詢結果,但不是從星期天開始。我在Oracle中使用以下查詢來啓動w/Monday。 (修改它以開始一週中的任何一天的訂購,例如,將'MONDAY'更改爲'TUESDAY'。)
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'))
選擇 * FROM 類 ORDER BY CASE 當白天= '星期天',那麼1 當白天= '星期一',那麼2 當白天='Tuesday'THEN 3 當日='星期三'那麼4 當日='星期四'那麼5 當日='星期五'那麼6 該表中用戶當白天= '星期六' 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
假設用戶已經被稱爲表的類已經類標識碼(主鍵),類名,
日
這是星期天開始的一天。 –