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

MySQLで日付で注文する方法

    問題:

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

    例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
    アート NULL
    数学 2019-12-19
    科学 2020-01-05
    健康 2020-01-05
    英語 2020-01-08

    ディスカッション:

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

    SELECT *
    FROM exam
    ORDER BY exam_date ASC;
    

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

    SELECT *
    FROM exam
    ORDER BY exam_date DESC;
    

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

    例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 STR_TO_DATE(CONCAT(exam_year, ' ', exam_month, ' ', exam_day), '%Y %M %d');
    

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

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

    ディスカッション:

    日付で並べ替えるには、年、月、日の値から日付値を作成します。これを行うには、STR_TO_DATE()関数を使用します。 'Year Month Dayに文字列として日付を保存している場合 '形式。STR_TO_DATE(date_string, '%Y %M %d')を使用して日付にキャストできます。 。ただし、最初に、CONCAT()関数を使用して文字列を作成する必要があります。

    CONCAT(exam_year, ' ', exam_month, ' ', exam_day)
    

    CONCAT() 関数は、すべての引数を1つの文字列に結合します。文字列に数字をキャストする必要はありません。 'Year Month Dayで文字列を取得したいので '形式。引数はexam_yearです。 、exam_monthexam_day 、およびそれらの間のスペース。

    次に、STR_TO_DATE(date_string, '%Y %M %d')を使用してこの文字列を日付に変換する必要があります 働き。この関数の2番目の引数は、日付形式です。 %Y 年を表し、%M 月(数字ではなくフルネーム)を表し、%d 日を表します。

    STR_TO_DATE(CONCAT(exam_year, ' ', exam_month, ' ', exam_day), '%Y %M %d')

    ORDER BYで使用します 行を日付の昇順で並べ替える句。行を降順で表示したい場合は、DESCを追加するだけです。 このようなキーワード:

    SELECT *
    FROM exam
    ORDER BY STR_TO_DATE(CONCAT(exam_year, ' ', exam_month, ' ', exam_day), '%Y %M %d') DESC;
    

    1. SQLite JSON_VALID()

    2. リストエントリのあるSQLテーブルと各エントリの行のあるSQLテーブル

    3. PgBouncer 1.7 –「復活後に色が変わる」

    4. PL/SQLの動的SELECTINTO句でバインド変数を使用する