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

PostgreSQLまたはOracleで日付順に並べ替える方法

    問題:

    行を日付で並べ替えたい。

    例1:

    exam テーブルには2つの列、subjectがあります およびexam_date

    subject Exam_date
    数学 2019-12-19
    英語 2020-01-08
    科学 2020-01-05
    健康 2020-01-05
    アート NULL

    exam_dateで行を並べ替えたい 。

    解決策:

    SELECT *
    FROM exam
    ORDER BY exam_date;
    

    結果は次のようになります(行はexam_dateの昇順で並べ替えられます ):

    subject Exam_date
    数学 2019-12-19
    科学 2020-01-05
    健康 2020-01-05
    英語 2020-01-08
    アート NULL

    ディスカッション:

    ORDER BYを使用します キーワードと並べ替える列の名前。このようにして、この列でデータを昇順で並べ替えます。 ASCを使用することもできます 順序が昇順であることを明確にするためのキーワード(最も早い日付が最初に表示され、最も遅い日付が最後に表示されるなど)。

    SELECT *
    FROM exam
    ORDER BY exam_date ASC;
    

    最も遅い日付を最初に表示し、最も早い日付を最後に表示する場合は、降順で並べ替える必要があります。 DESCを使用する この場合のキーワード。

    SELECT *
    FROM exam
    ORDER BY exam_date DESC;
    

    PostgreSQLおよびOracleでは、NULL sは、昇順で並べ替えるときに最後に表示され、降順で並べ替えるときに最初に表示されます。また、同じexam_dateの行 ランダムな順序で表示されます(Scienceが表示される場合があります 2番目とHealth 3番目、または2番目の健康とScience 3番目)。

    例2:

    exam テーブルには次の列があります:subjectexam_yearexam_month 、およびexam_day 。月は数字ではなく名前で示されます。

    subject Exam_year Exam_month Exam_day
    数学 2019 12月 19
    英語 2020 1月 8
    科学 2020 1月 5
    健康 2020 1月 5
    アート NULL NULL NULL

    試験日で行を並べ替えたい。

    解決策:

    SELECT *
    FROM exam
    ORDER BY
      exam_year,
      EXTRACT(MONTH FROM TO_DATE(exam_month, 'Month')),
      exam_day;
    

    結果は次のようになります(行はexam_yearの昇順で並べ替えられます 、exam_month 、およびexam_date ):

    subject Exam_year Exam_month Exam_day
    数学 2019 12月 19
    健康 2020 1月 5
    科学 2020 1月 5
    英語 2020 1月 8
    アート NULL NULL NULL

    ディスカッション:

    行は、年、月、日の3つの値で並べ替える必要がありますが、正しい順序にするには、月を数値('January)に変換する必要があります。 'から1 、'February 'から2 など)。それ以外の場合は、「December」と表示されます。 '前'January '。 TO_DATE(exam_month、'Month')関数は、完全な月の名前を'0001-MM-01の日付に変換します ' フォーマット。たとえば、「0001-12-01」を取得します。 '12月。

    これで、EXTRACT(MONTH FROM date)関数を使用して、この日付値から月を抽出できます。月は数値として返されます。

    これら2つの関数を組み合わせると、次の数式を使用して月を数値として取得できます。

    EXTRACT(MONTH FROM TO_DATE(exam_month, 'Month'))
    

    行を日付で並べ替えるには、年、月、日で(この順序で)並べ替える必要があります。最新の試験を最初に見たい場合は、降順で並べ替える必要があります。これを行うには、DESCを使用する必要があります ORDER BYの各列の後のキーワード 条項。

    SELECT *
    FROM exam
    ORDER BY
      exam_year DESC,
      EXTRACT(MONTH FROM TO_DATE(exam_month, 'Month')) DESC,
      exam_day DESC;
    

    1. クラウド内のMySQL-AmazonRDSの長所と短所

    2. JSON_MODIFY()SQL Server(T-SQL)の例

    3. ハイブリッドSQLServer環境に詳細な診断を提供する世界初のSaaSプラットフォームの紹介

    4. MySQLのローリングアップグレードを実行する方法