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

SUBDATE() vs DATE_SUB() i MySQL:Hvad er forskellen?

Forskellen mellem MySQL SUBDATE() og DATE_SUB() funktioner er nøjagtig det samme som forskellen mellem ADDDATE() og DATE_ADD() funktioner. Den ene funktion giver mulighed for to forskellige syntaksformer, mens den anden kun tillader én.

Denne artikel viser forskellen.

Syntaks

Her er syntaksen for hver funktion.

DATE_SUB()

DATE_SUB() syntaks går sådan her.

DATE_SUB(date,INTERVAL expr unit)

Dette accepterer en datoværdi efterfulgt af INTERVAL nøgleord og det udtryk og den enhed, der skal trækkes fra datoen fra det første argument.

SUBDATE()

SUBDATE() syntaks tillader to former. Du kan bruge en af ​​følgende formularer.

SUBDATE(date,INTERVAL expr unit)

Eller

SUBDATE(expr,days)

Den første form er nøjagtig den samme som DATE_SUB() syntaks, og når du bruger denne syntaks, SUBDATE() funktion er et synonym for DATE_SUB() .

Den anden syntaksform er dog kun tilgængelig, når du bruger SUBDATE() funktion, og den giver dig mulighed for at bruge en stenografi til at angive antallet af dage, der skal trækkes fra datoen.

Eksempel

Her er et eksempel på brug af begge funktioner til at trække et bestemt antal dage fra den samme dato.

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 hvis vi prøver at bruge den alternative syntaksform med DATE_SUB() vi får en fejl.

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

Og selvfølgelig er årsagen til denne fejl, fordi DATE_SUB() understøtter ikke den syntaks.

Bemærk, at denne anden syntaksform kun kan bruges til at trække dage fra fra datoen. Hvis du har brug for at trække en anden enhed fra (f.eks. måneder), skal du bruge den første syntaks.


  1. Login mislykkedes for brugeren 'DOMAIN\MACHINENAME$'

  2. Sådan laver du en indre joinforbindelse på rækkenummer i sql-server

  3. Tilføj en databasemailkonto til en profil (T-SQL)

  4. Hvordan kan jeg generere (eller få) et ddl-script på en eksisterende tabel i Oracle? Jeg er nødt til at genskabe dem i Hive