Mysql
 sql >> Datenbank >  >> RDS >> Mysql

SUBDATE() vs. DATE_SUB() in MySQL:Was ist der Unterschied?

Der Unterschied zwischen dem MySQL SUBDATE() und DATE_SUB() Funktionen ist genau dasselbe wie der Unterschied zwischen ADDDATE() und DATE_ADD() Funktionen. Eine Funktion erlaubt zwei verschiedene Syntaxformen, die andere nur eine.

Dieser Artikel demonstriert den Unterschied.

Syntax

Hier ist die Syntax für jede Funktion.

DATE_SUB()

Das DATE_SUB() Syntax geht so.

DATE_SUB(date,INTERVAL expr unit)

Dies akzeptiert einen Datumswert, gefolgt von INTERVAL Schlüsselwort und der Ausdruck und die Einheit, für die von dem durch das erste Argument gelieferten Datum subtrahiert werden soll.

SUBDATE()

Das SUBDATE() Die Syntax lässt zwei Formen zu. Sie können eines der folgenden Formulare verwenden.

SUBDATE(date,INTERVAL expr unit)

Oder

SUBDATE(expr,days)

Die erste Form ist genau gleich wie DATE_SUB() Syntax, und wenn Sie diese Syntax verwenden, das SUBDATE() Funktion ist ein Synonym für DATE_SUB() .

Die zweite Syntaxform ist jedoch nur verfügbar, wenn SUBDATE() verwendet wird Funktion, und es ermöglicht Ihnen, eine Kurzform zu verwenden, um die Anzahl der Tage anzugeben, die vom Datum subtrahiert werden sollen.

Beispiel

Hier ist ein Beispiel für die Verwendung beider Funktionen, um eine bestimmte Anzahl von Tagen vom selben Datum abzuziehen.

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';

Ergebnis:

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

Wenn wir jedoch versuchen, die alternative Syntaxform mit DATE_SUB() zu verwenden wir erhalten eine Fehlermeldung.

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

Ergebnis:

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

Und der Grund für diesen Fehler ist natürlich DATE_SUB() unterstützt diese Syntax nicht.

Beachten Sie, dass diese zweite Syntaxform nur zum Subtrahieren von Tagen verwendet werden kann ab dem Datum. Wenn Sie eine andere Einheit subtrahieren müssen (z. B. Monate), müssen Sie die erste Syntax verwenden.