sql >> データベース >  >> RDS >> Oracle

Oracle sqlは、曜日を現在の日で並べ替えます

    土曜日を最初として、一連の日付を曜日で並べ替える場合は、変更した日付で並べ替えることを検討してください。

    create table t1(my_date date);
    insert into t1
    select trunc(sysdate)+rownum
    from dual
    connect by level <= 20
    
    select
      my_date,
      to_char(my_date,'Day'),
      to_char(my_date,'D')
    from
      t1
    order by
      to_char(my_date + 1,'D');
    

    http://sqlfiddle.com/#!4/5940b/3

    欠点は、直感的ではないため、この方法を使用する場合はコードコメントを追加することです。

    編集:番号のリストがある場合は、リスト変換を使用してcaseステートメントで並べ替えます:

    case day
      when 1 then 3
      when 2 then 4
      when 3 then 5
      when 4 then 6
      when 5 then 7
      when 6 then 1 -- saturday
      when 7 then 2
    end
    

    ...またはよりコンパクトですが、直感的ではありません:

    case
      when day <= 5 then day + 2
      else               day - 5
    end
    
    order by case 
    


    1. MySQLが最適なインデックスを使用しないのはなぜですか

    2. 原因:java.sql.SQLException:ユーザー'root' @'localhost'のアクセスが拒否されました(パスワードを使用:YES)

    3. MySQLで小文字を含む行を見つける3つの方法

    4. ネストされていないjsonb列でのGROUPBY+COUNTDISTINCTの最適化