解决方案 »

  1.   

    你那里报错是因为你用了两个引号吧~
    其实方法有很多,例如:select b.* from (
    select to_char(sysdate-1,'yyyy-IW-Day') a from dual
    union select to_char(sysdate-2,'yyyy-IW-Day') from dual
    union select to_char(sysdate-3,'yyyy-IW-Day') from dual
    union select to_char(sysdate-4,'yyyy-IW-Day') from dual
    union select to_char(sysdate-5,'yyyy-IW-Day') from dual
    union select to_char(sysdate-6,'yyyy-IW-Day') from dual
    union select to_char(sysdate,'yyyy-IW-Day') from dual ) b
    order by decode(substr(a,9),'星期一',1,'星期二',2,'星期三',3,'星期四',4,'星期五',5,'星期六',6,'星期日',7)
      

  2.   

    我的sql语句语句是这样写的
    SELECT DISTINCT
    (
    TO_CHAR (CREATETIME, 'yyyy-IW-Day')
    )
    case (CREATETIME, 'yyyy-IW-Day')
    when 'yyyy-IW-Day'= 'yyyy-IW-星期一' THEN 1
    when 'yyyy-IW-Day'= 'yyyy-IW-星期二' THEN 2
    when 'yyyy-IW-Day'= 'yyyy-IW-星期三' THEN 3
    when 'yyyy-IW-Day'= 'yyyy-IW-星期四' THEN 4
    when 'yyyy-IW-Day'= 'yyyy-IW-星期五' THEN 5
    when 'yyyy-IW-Day'= 'yyyy-IW-星期六' THEN 6
    when 'yyyy-IW-Day'= 'yyyy-IW-星期日' THEN 7
    END week
    FROM
    DAYSTATEMENTCOLD
    WHERE
    TO_CHAR (CREATETIME, 'yyyy-IW') = (
    SELECT DISTINCT
    (
    TO_CHAR (CREATETIME, 'yyyy-IW')
    )
    FROM
    DAYSTATEMENTCOLD
    WHERE
    TO_CHAR (CREATETIME, 'yyyy-IW-Day') = TO_CHAR ('2014-32-星期一')
    )
    ORDER BY week ASC
    思路是:根据 ('2014-32-星期一')其中32是指周,然后得到这一周所有的星期,再对TO_CHAR (CREATETIME, 'yyyy-IW-Day')进行排序。
      

  3.   

    case (CREATETIME, 'yyyy-IW-Day')
    when 'yyyy-IW-Day'= 'yyyy-IW-星期一' THEN 1
    when 'yyyy-IW-Day'= 'yyyy-IW-星期二' THEN 2
    when 'yyyy-IW-Day'= 'yyyy-IW-星期三' THEN 3
    when 'yyyy-IW-Day'= 'yyyy-IW-星期四' THEN 4
    when 'yyyy-IW-Day'= 'yyyy-IW-星期五' THEN 5
    when 'yyyy-IW-Day'= 'yyyy-IW-星期六' THEN 6
    when 'yyyy-IW-Day'= 'yyyy-IW-星期日' THEN 7
    END week
    when的条件是俩字符串进行比较,这样case取出来的结果肯定是null
      

  4.   

    按照TO_CHAR (CREATETIME, 'yyyy-IW-Day')这个排序等于是按照年 周 天的顺序进行排序
    为啥不直接按照日期进行排序呢?效果应该是一样的呀
      

  5.   

       如果对TO_CHAR (CREATETIME, 'yyyy-IW-Day')直接排序的话,如果是同一年的同一周中的星期,在oracle中默认的是按照拼音的顺序进行排序,而我想要的是 星期一、星期二、星期三这样子。
      

  6.   

    直接 order by CREATETIME
      

  7.   

    谢谢的建议,我也这样尝试过,过程如下
    sql语句是
    SELECT DISTINCT
    (
    TO_CHAR (CREATETIME, 'yyyy-IW-Day')
    )AS SPARE
    FROM
    DAYSTATEMENTCOLD
    WHERE
    TO_CHAR (CREATETIME, 'yyyy-IW') = 
    ( SELECT DISTINCT
    (
    TO_CHAR (CREATETIME, 'yyyy-IW')
    )
    FROM
    DAYSTATEMENTCOLD
    WHERE
    TO_CHAR (CREATETIME, 'yyyy-IW-Day') = TO_CHAR ('2014-32-星期一'))
    ORDER BY  TO_CHAR (CREATETIME, 'yyyy-IW-Day') ASC
    结果是
      

  8.   

    奇怪了,我表达有问题吗?
    把你的 ORDER BY  TO_CHAR (CREATETIME, 'yyyy-IW-Day') ASC
    改为ORDER BY  CREATETIME ASC
    SELECT DISTINCT TO_CHAR (CREATETIME, 'yyyy-IW-Day')AS SPARE
    FROM DAYSTATEMENTCOLD
    WHERE TO_CHAR (CREATETIME, 'yyyy-IW') = 
    (SELECT DISTINCT TO_CHAR (CREATETIME, 'yyyy-IW')
    FROM DAYSTATEMENTCOLD
    WHERE TO_CHAR (CREATETIME, 'yyyy-IW-Day') = TO_CHAR ('2014-32-星期一'))
    ORDER BY  CREATETIME ASC
      

  9.   

       这个不行吧!select出来的是 TO_CHAR (CREATETIME, 'yyyy-IW-Day')这样的形式,而order by是CREATETIME。
     这样会报    : 不是 SELECTed 表达式这样的错误。还是感谢你耐心的回答,真的有点不好意思老
      

  10.   

    直接这样order by 语法上肯定是正确的,在sqlplus,pl/sql都没问题,你用的什么工具?
    个别工具上确实存在类似问题,比如说某些报表工具
    如果是报表的话,可以在select的时候多select一列,显示的时候不显示就是了
    另外你的条件写得有点罗嗦
    SELECT DISTINCT trunc(CREATETIME),TO_CHAR (CREATETIME, 'yyyy-IW-Day')AS SPARE
    FROM DAYSTATEMENTCOLD
    WHERE TO_CHAR (CREATETIME, 'yyyy-IW') = '2014-32'
    ORDER BY  trunc(CREATETIME) ASC