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

MySQLのSUBDATE()とDATE_SUB():違いは何ですか?

    MySQLのSUBDATE()の違い およびDATE_SUB() 関数は、ADDDATE()の違いとまったく同じです。 およびDATE_ADD() 関数。 1つの関数では2つの異なる構文形式が可能ですが、もう1つの関数では1つだけが可能です。

    この記事は違いを示しています。

    構文

    各関数の構文は次のとおりです。

    DATE_SUB()

    DATE_SUB() 構文は次のようになります。

    DATE_SUB(date,INTERVAL expr unit)

    これは日付値を受け入れ、その後にINTERVALが続きます キーワードと、最初の引数で指定された日付から減算する式と単位。

    SUBDATE()

    SUBDATE() 構文では2つの形式が可能です。次のいずれかのフォームを使用できます。

    SUBDATE(date,INTERVAL expr unit)

    または

    SUBDATE(expr,days)

    最初の形式は、DATE_SUB()とまったく同じです。 構文、およびこの構文を使用する場合、SUBDATE() 関数はDATE_SUB()の同義語です 。

    ただし、2番目の構文形式は、SUBDATE()を使用する場合にのみ使用できます。 関数であり、簡単な方法で日付から減算する日数を指定できます。

    両方の関数を使用して、同じ日付から特定の日数を減算する例を次に示します。

    SET @date = '2023-12-10';
    SELECT 
        DATE_SUB(@date, INTERVAL 5 DAY) AS 'DATE_SUB',
        SUBDATE(@date, INTERVAL 5 DAY) AS 'SUBDATE 1',
        SUBDATE(@date, 5) AS 'SUBDATE 2';

    結果:

    +------------+------------+------------+
    | DATE_SUB   | SUBDATE 1  | SUBDATE 2  |
    +------------+------------+------------+
    | 2023-12-05 | 2023-12-05 | 2023-12-05 |
    +------------+------------+------------+

    ただし、DATE_SUB()で代替構文形式を使用しようとすると エラーが発生します。

    SET @date = '2023-12-10';
    SELECT DATE_SUB(@date, 5) AS 'DATE_SUB 2';

    結果:

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '5) AS 'DATE_SUB 2'' at line 1

    そしてもちろん、このエラーの理由はDATE_SUB() その構文をサポートしていません。

    この2番目の構文形式は、の減算にのみ使用できることに注意してください。 日付から。他の単位(たとえば、月)を引く必要がある場合は、最初の構文を使用する必要があります。


    1. プリペアドステートメントを使用したMySQLのLIMITキーワード

    2. ヒープテーブルへのINSERT…SELECTによる最小限のロギング

    3. JPAによる永続性のためのJavaサポートを理解する

    4. SQLDeveloperはスクリプトの実行をサポートしていますか?