I MariaDB, SUBDATE()
er en indbygget dato- og tidsfunktion, der trækker et beløb fra en given dato.
Det giver dig mulighed for at ændre en dato ved at angive datoen, den enhed, der skal trækkes fra, og det beløb, der skal trækkes fra. Du kan sende et negativt beløb for at tilføje til datoen, i stedet for at trække fra den.
SUBDATE()
har også en genvejssyntaks, der giver dig mulighed for at angive de dage, der skal trækkes fra.
Syntaks
SUBDATE()
funktion har to syntakser.
Syntaks 1:
SUBDATE(expr,days)
Hvor expr
er datoen og days
er antallet af dage at trække fra.
Syntaks 2:
SUBDATE(date,INTERVAL expr unit)
Hvor date
er datoen for ændring, expr
er det beløb, der skal trækkes fra, og unit
er den dato/tidsenhed, der skal trækkes fra (f.eks. sekund, minut osv.).
Når du bruger denne syntaks, SUBDATE()
er et synonym for DATE_SUB()
.
Eksempel – Syntaks 1
Her er et eksempel på brug af den første syntaks:
SELECT SUBDATE('2021-05-01', 1);
Resultat:
+--------------------------------+| SUBDATE('2021-05-01', 1) |+--------------------------------+| 30-04-2021 |+--------------------------------+
Vi kan også inkludere tidsdelen, hvis det kræves:
SELECT SUBDATE('2021-05-01 10:00:00', 1);
Resultat:
+----------------------------------------+| SUBDATE('2021-05-01 10:00:00', 1) |+------------------------------------- ----+| 30-04-2021 10:00:00 |+--------------------------------------------+Her er to alternative måder at gøre det samme på:
SELECT DATE_SUB('2021-05-01 10:00:00', INTERVAL 1 DAY) AS "Result 1", '2021-05-01 10:00:00' - INTERVAL 1 DAY AS "Result 2";
Resultat:
+---------------------+---------------------+| Resultat 1 | Resultat 2 |+---------------------+---------------------+| 30-04-2021 10:00:00 | 30-04-2021 10:00:00 |+---------------------------+---------------- -----+Eksempel – Syntaks 2
Her er et eksempel på brug af den anden syntaks:
SELECT SUBDATE('2021-05-31 10:00:00', INTERVAL 1 HOUR);
Resultat:
+---------------------------------------------- ---+| SUBDATE('2021-05-31 10:00:00', INTERVAL 1 HOUR) |+------------------------------------ --------------------+| 31-05-2021 09:00:00 |+---------------------------------------------------- -----------+Denne syntaks giver os mulighed for at trække andre enheder fra datoen (dvs. ikke kun dagene). Her trak jeg en time fra datoen, men jeg kunne lige så godt have trukket minutter, sekunder, måneder, dage, år osv. Eksempler senere.
Her er to alternative metoder til at opnå det samme resultat som ovenstående eksempel:
SELECT DATE_SUB('2021-05-31 10:00:00', INTERVAL 1 HOUR) AS "Result 1", '2021-05-31 10:00:00' - INTERVAL 1 HOUR AS "Result 2";
Resultat:
+---------------------+---------------------+| Resultat 1 | Resultat 2 |+---------------------+---------------------+| 31-05-2021 09:00:00 | 31-05-2021 09:00:00 |+---------------------------+---------------- -----+Negative intervaller
Angivelse af et negativt interval tilføjer det beløb til datoen.
Eksempel:
SELECT SUBDATE('2021-05-31 10:00:00', INTERVAL -1 HOUR);
Resultat:
+---------------------------------------------- ----+| SUBDATE('2021-05-31 10:00:00', INTERVAL -1 TIME) |+-------------------------------- ----------------------+| 31-05-2021 11:00:00 |+------------------------------------------------ ------------+Andre enheder
Her er et eksempel, der trækker et interval på 1 fra de forskellige dato- og tidsenheder:
SELECT SUBDATE('2021-05-01 10:00:00', INTERVAL 1 YEAR) AS YEAR, SUBDATE('2021-05-01 10:00:00', INTERVAL 1 MONTH) AS MONTH, SUBDATE('2021-05-01 10:00:00', INTERVAL 1 DAY) AS DAY, SUBDATE('2021-05-01 10:00:00', INTERVAL 1 HOUR) AS HOUR, SUBDATE('2021-05-01 10:00:00', INTERVAL 1 MINUTE) AS MINUTE, SUBDATE('2021-05-01 10:00:00', INTERVAL 1 SECOND) AS SECOND, SUBDATE('2021-05-01 10:00:00', INTERVAL 1 MICROSECOND) AS MICROSECOND;
Resultat (ved hjælp af lodret output):
ÅR:2020-05-01 10:00:00 MÅNED:2021-04-01 10:00:00 DAG:2021-04-30 10:00:00 TIME:2021-05-01 09:00:00 MINUTE:2021-05-01 09:59:00 SECOND:2021-05-01 09:59:59MICROSECOND:2021-05-01 09:59:59.999999Sammensatte enheder
Her er et eksempel, der bruger sammensatte enheder:
SELECT SUBDATE('2021-05-01 10:00:00', INTERVAL '1:2' YEAR_MONTH) AS "YEAR_MONTH", SUBDATE('2021-05-01 10:00:00', INTERVAL '1:25:35' HOUR_SECOND) AS "HOUR_SECOND", SUBDATE('2021-05-01 10:00:00', INTERVAL '1:30' DAY_MINUTE) AS "DAY_MINUTE";
Resultat:
+---------------------+---------------------+-- -------------------+| YEAR_MONTH | HOUR_SECOND | DAY_MINUTE |+---------------------+---------------------+--- ------------------+| 01-03-2020 10:00:00 | 01-05-2021 08:34:25 | 01-05-2021 08:30:00 |+------------------------+---------------- -----+----------------------------+Nulledatoer
Sender
null
for datoen returnerernull
:SELECT SUBDATE(null, INTERVAL 1 YEAR);
Resultat:
+--------------------------------+| SUBDATE(null, INTERVAL 1 ÅR) |+--------------------------------+| NULL |+--------------------------------+Manglende argument
Kalder
SUBDATE()
med det forkerte antal argumenter, eller uden at sende nogen argumenter, resulterer det i en fejl:SELECT SUBDATE();
Resultat:
FEJL 1064 (42000):Du har en fejl i din SQL-syntaks; tjek manualen, der svarer til din MariaDB-serverversion for den rigtige syntaks til brug i nærheden af ')' på linje 1