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

ORACLE SQL | ORDERBYのデータを変更する

    ORDER BYを変更して、数字で並べ替えます:

     ORDER BY regexp_replace(FILE_NAME, '_m', 1),
              regexp_replace(FILE_NAME, '_l', 2),
              regexp_replace(FILE_NAME, '_r', 3);
    

    例:

    WITH t
      AS (SELECT '12345_l.tif' AS file_name FROM dual
          UNION
          SELECT '12345_m.tif' FROM dual
          UNION
          SELECT '12345_r.tif' FROM dual
          UNION
          SELECT '12345_x.tif' FROM dual
          UNION
          SELECT '12345_y.tif' FROM dual)
    SELECT file_name
      FROM t
     ORDER BY regexp_replace(FILE_NAME, '_m', 1),
              regexp_replace(FILE_NAME, '_l', 2),
              regexp_replace(FILE_NAME, '_r', 3);
    

    与える:

    ==============
    12345_m.tif
    12345_l.tif
    12345_r.tif
    12345_x.tif
    12345_y.tif
    

    お役に立てば幸いです...

    または、次を使用することもできます:

     ORDER BY (CASE SUBSTR(file_name, INSTR(file_name, '_')+1, 1)
                 WHEN 'm' THEN 1
                 WHEN 'l' THEN 2
                 WHEN 'r' THEN 3
                 ELSE 4
                END) ASC;
    

    例:

    WITH t
      AS (SELECT '12345_l.tif' AS file_name FROM dual
          UNION
          SELECT '12345_y.tif' FROM dual
          UNION
          SELECT '12345_r.tif' FROM dual
          UNION
          SELECT '12345_x.tif' FROM dual
          UNION
          SELECT '12345_m.tif' FROM dual)
    SELECT file_name
      FROM t
     ORDER BY (CASE SUBSTR(file_name, INSTR(file_name, '_')+1, 1)
                 WHEN 'm' THEN 1
                 WHEN 'l' THEN 2
                 WHEN 'r' THEN 3
                 ELSE 4
                END) ASC;
    

    与える:

    12345_m.tif
    12345_l.tif
    12345_r.tif
    12345_x.tif
    12345_y.tif
    



    1. MySQL5.6DATETIMEはミリ秒/マイクロ秒を受け入れません

    2. 製品名のURLを書き換えます

    3. トップ/トップ降順中央値ソリューションの改善

    4. ストアドプロシージャとmysql_insert_idの問題