sql >> Databasteknik >  >> RDS >> Mysql

SUBDATE() vs DATE_SUB() i MySQL:Vad är skillnaden?

Skillnaden mellan MySQL SUBDATE() och DATE_SUB() funktioner är exakt samma som skillnaden mellan ADDDATE() och DATE_ADD() funktioner. En funktion tillåter två olika syntaxformer, medan den andra bara tillåter en.

Den här artikeln visar skillnaden.

Syntax

Här är syntaxen för varje funktion.

DATE_SUB()

DATE_SUB() syntax går så här.

DATE_SUB(date,INTERVAL expr unit)

Detta accepterar ett datumvärde, följt av INTERVAL nyckelord och uttrycket och enheten som ska subtraheras från det datum som anges av det första argumentet.

SUBDATE()

SUBDATE() syntax tillåter två former. Du kan använda något av följande formulär.

SUBDATE(date,INTERVAL expr unit)

Eller

SUBDATE(expr,days)

Det första formuläret är exakt samma som DATE_SUB() syntax, och när du använder denna syntax, SUBDATE() funktion är en synonym för DATE_SUB() .

Den andra syntaxformen är dock endast tillgänglig när du använder SUBDATE() funktion, och den låter dig använda ett förkortningssätt för att ange antalet dagar att subtrahera från datumet.

Exempel

Här är ett exempel på hur du använder båda funktionerna för att subtrahera ett visst antal dagar från samma datum.

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

Resultat:

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

Men om vi försöker använda den alternativa syntaxformen med DATE_SUB() vi får ett fel.

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

Resultat:

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

Och naturligtvis är orsaken till detta fel att DATE_SUB() stöder inte den syntaxen.

Observera att denna andra syntaxform endast kan användas för att subtrahera dagar från datumet. Om du behöver subtrahera någon annan enhet (till exempel månader), måste du använda den första syntaxen.


  1. SQLite Insert

  2. Uppdatera en e-postprofil för databas (SSMS)

  3. Sätt i från CTE

  4. MOD() Funktion i Oracle