Mysql
 sql >> Database >  >> RDS >> Mysql

SUBDATE() vs DATE_SUB() in MySQL:qual è la differenza?

La differenza tra MySQL SUBDATE() e DATE_SUB() functions è esattamente la stessa della differenza tra ADDDATE() e DATE_ADD() funzioni. Una funzione consente due diverse forme di sintassi, mentre l'altra ne consente solo una.

Questo articolo dimostra la differenza.

Sintassi

Ecco la sintassi per ciascuna funzione.

DATE_SUB()

Il DATE_SUB() la sintassi va così.

DATE_SUB(date,INTERVAL expr unit)

Questo accetta un valore di data, seguito da INTERVAL parola chiave e l'espressione e l'unità per cui sottrarre dalla data fornita dal primo argomento.

SOTTODATO()

Il SUBDATE() la sintassi consente due forme. Puoi utilizzare uno dei seguenti moduli.

SUBDATE(date,INTERVAL expr unit)

Oppure

SUBDATE(expr,days)

Il primo modulo è esattamente lo stesso di DATE_SUB() sintassi e quando usi questa sintassi, il SUBDATE() funzione è sinonimo di DATE_SUB() .

Tuttavia, il secondo modulo di sintassi è disponibile solo quando utilizzi il SUBDATE() funzione e ti consente di utilizzare un modo abbreviato per specificare il numero di giorni da sottrarre dalla data.

Esempio

Ecco un esempio di utilizzo di entrambe le funzioni per sottrarre un certo numero di giorni dalla stessa data.

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

Risultato:

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

Tuttavia, se proviamo a utilizzare il modulo di sintassi alternativo con DATE_SUB() otteniamo un errore.

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

Risultato:

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

E, naturalmente, il motivo di questo errore è perché DATE_SUB() non supporta quella sintassi.

Nota che questo secondo modulo di sintassi può essere utilizzato solo per sottrarre giorni dalla data. Se devi sottrarre qualsiasi altra unità (ad esempio mesi), dovrai utilizzare la prima sintassi.