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

Oracleで日付をフォーマットおよびソートする方法は?

    次のようなものが必要なようです

    SELECT to_char( your_date_column, your_format_mask )
      FROM your_table
     ORDER BY your_date_column
    

    SELECTで リストでは、希望する形式で日付を表す文字列を返します。 ORDER BYで 条項、あなたは実際の日付で注文したいです。標準のEMPを使用する およびDEPT たとえば、テーブル

    SQL> ed
    Wrote file afiedt.buf
    
      1  select to_char( hiredate, 'DD-MM-YYYY' )
      2    from emp,
      3         dept
      4   where emp.deptno = dept.deptno
      5*  order by hiredate
    SQL> /
    
    TO_CHAR(HI
    ----------
    17-12-1980
    20-02-1981
    22-02-1981
    02-04-1981
    01-05-1981
    09-06-1981
    08-09-1981
    28-09-1981
    17-11-1981
    03-12-1981
    03-12-1981
    23-01-1982
    19-04-1987
    23-05-1987
    
    14 rows selected.
    

    DISTINCTを追加する場合、問題は、適用している関数(この場合はTO_CHAR)がテーブルのデータから出力のデータへの1対1のマッピングを提供することをOracleが認識しないことです。たとえば、2つの異なる日付(2010年10月1日10:15:15と2010年10月1日23:45:50)が同じ文字出力を生成し、Oracleが2つの「01-10-2010」文字列の1つを削除するように強制する場合があります。ただし、2つの日付の並べ替えは異なります。 DISTINCTを実行した後、クエリをネストし、文字列を日付に戻すことで、この問題を修正できます。 ORDER BYを実行する前に

    SQL> ed
    Wrote file afiedt.buf
    
      1  select hire_date_str
      2    from (
      3      select distinct to_char( hiredate, 'DD-MM-YYYY' ) hire_date_str
      4        from emp,
      5             dept
      6       where emp.deptno = dept.deptno
      7      )
      8*  order by to_date(hire_date_str,'DD-MM-YYYY')
    SQL> /
    
    HIRE_DATE_
    ----------
    17-12-1980
    20-02-1981
    22-02-1981
    02-04-1981
    01-05-1981
    09-06-1981
    08-09-1981
    28-09-1981
    17-11-1981
    03-12-1981
    23-01-1982
    19-04-1987
    23-05-1987
    
    13 rows selected.
    


    1. SpringデータJPAクエリで@lockタイムアウトを指定するにはどうすればよいですか?

    2. Hibernate:varcharを返すストアド関数を呼び出す方法は?

    3. SqliteまたはMySql?決める方法は?

    4. 日付のwhere句にto_charが含まれるOracleクエリを最適化する方法