sql >> Database >  >> RDS >> Mysql

SUBDATE() vs DATE_SUB() in MySQL:wat is het verschil?

Het verschil tussen de MySQL SUBDATE() en DATE_SUB() functies is precies hetzelfde als het verschil tussen de ADDDATE() en DATE_ADD() functies. De ene functie maakt twee verschillende syntaxisvormen mogelijk, terwijl de andere slechts één toestaat.

Dit artikel laat het verschil zien.

Syntaxis

Hier is de syntaxis voor elke functie.

DATE_SUB()

De DATE_SUB() syntaxis gaat als volgt.

DATE_SUB(date,INTERVAL expr unit)

Dit accepteert een datumwaarde, gevolgd door de INTERVAL trefwoord en de uitdrukking en eenheid die moeten worden afgetrokken van de datum die door het eerste argument wordt geleverd.

SUBDATE()

De SUBDATE() syntaxis staat twee vormen toe. U kunt een van de volgende formulieren gebruiken.

SUBDATE(date,INTERVAL expr unit)

Of

SUBDATE(expr,days)

De eerste vorm is precies hetzelfde als de DATE_SUB() syntaxis, en wanneer u deze syntaxis gebruikt, de SUBDATE() functie is een synoniem voor DATE_SUB() .

Het tweede syntaxisformulier is echter alleen beschikbaar bij gebruik van de SUBDATE() functie, en u kunt een verkorte manier gebruiken om het aantal dagen op te geven dat van de datum moet worden afgetrokken.

Voorbeeld

Hier is een voorbeeld van het gebruik van beide functies om een ​​bepaald aantal dagen van dezelfde datum af te trekken.

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

Resultaat:

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

Als we echter proberen de alternatieve syntaxisvorm te gebruiken met DATE_SUB() we krijgen een foutmelding.

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

Resultaat:

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

En de reden voor deze fout is natuurlijk dat DATE_SUB() ondersteunt die syntaxis niet.

Merk op dat deze tweede syntaxisvorm alleen kan worden gebruikt voor het aftrekken van dagen vanaf de datum. Als u een andere eenheid moet aftrekken (bijvoorbeeld maanden), moet u de eerste syntaxis gebruiken.


  1. Nul volgen

  2. Hoe selecteer ik slechts 1 rij van Oracle SQL?

  3. Succesvolle MySQL/MariaDB back-up- en herstelstrategieën

  4. Hoe kunnen we de grootte van de uitvoerparameter definiëren in de opgeslagen procedure?