I MariaDB, SUBDATE()
är en inbyggd datum- och tidsfunktion som subtraherar ett belopp från ett givet datum.
Det låter dig ändra ett datum genom att ange datumet, enheten som ska subtraheras och beloppet som ska subtraheras. Du kan skicka ett negativt belopp för att lägga till till datumet, istället för att subtrahera från det.
SUBDATE()
har också en genvägssyntax som låter dig ange vilka dagar som ska subtraheras.
Syntax
SUBDATE()
funktionen har två syntaxer.
Syntax 1:
SUBDATE(expr,days)
Där expr
är datumet och days
är antalet dagar att subtrahera.
Syntax 2:
SUBDATE(date,INTERVAL expr unit)
Där date
är datumet att ändra, expr
är beloppet att subtrahera, och unit
är den datum/tidsenhet som ska subtraheras (t.ex. sekund, minut, etc).
När du använder denna syntax, SUBDATE()
är en synonym för DATE_SUB()
.
Exempel – Syntax 1
Här är ett exempel på hur den första syntaxen används:
SELECT SUBDATE('2021-05-01', 1);
Resultat:
+--------------------------------+| SUBDATE('2021-05-01', 1) |+--------------------------------+| 2021-04-30 |+--------------------------------+
Vi kan även inkludera tidsdelen om det behövs:
SELECT SUBDATE('2021-05-01 10:00:00', 1);
Resultat:
+----------------------------------------+| SUBDATE('2021-05-01 10:00:00', 1) |+------------------------------------- ----+| 2021-04-30 10:00:00 |+--------------------------------------------+Här är två alternativa sätt att göra samma sak:
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 |+---------------------+----------------------------+| 2021-04-30 10:00:00 | 2021-04-30 10:00:00 |+------------------------+---------------- -----+Exempel – Syntax 2
Här är ett exempel på hur du använder den andra syntaxen:
SELECT SUBDATE('2021-05-31 10:00:00', INTERVAL 1 HOUR);
Resultat:
+------------------------------------------------------ ---+| SUBDATE('2021-05-31 10:00:00', INTERVAL 1 HOUR) |+------------------------------------ --------------------+| 2021-05-31 09:00:00 |+---------------------------------------------------- -----------+Denna syntax tillåter oss att subtrahera andra enheter från datumet (dvs inte bara dagarna). Här har jag subtraherat en timme från datumet, men jag kunde lika gärna ha subtraherat minuter, sekunder, månader, dagar, år etc. Exempel senare.
Här är två alternativa metoder för att uppnå samma resultat som exemplet ovan:
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 |+---------------------+----------------------------+| 2021-05-31 09:00:00 | 2021-05-31 09:00:00 |+-------------------------+---------------- -----+Negativa intervall
Ange ett negativt intervall lägger till det beloppet till datumet.
Exempel:
SELECT SUBDATE('2021-05-31 10:00:00', INTERVAL -1 HOUR);
Resultat:
+------------------------------------------------------ ----+| SUBDATE('2021-05-31 10:00:00', INTERVAL -1 HOUR) |+----------------------------------- ----------------------------+| 2021-05-31 11:00:00 |+------------------------------------------------ ------------+Övriga enheter
Här är ett exempel som subtraherar ett intervall på 1 från de olika datum- och tidsenheterna:
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 (med vertikal utdata):
ÅR:2020-05-01 10:00:00 MÅNAD:2021-04-01 10:00:00 DAG:2021-04-30 10:00:00 TIMME:2021-05-01 09:00:00 MINUT:2021-05-01 09:59:00 SEKUND:2021-05-01 09:59:59MICROSECOND:2021-05-01 09:59:59.999999Kompositenheter
Här är ett exempel som använder sammansatta enheter:
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 |+---------------------+---------------------------+--- ------------------+| 2020-03-01 10:00:00 | 2021-05-01 08:34:25 | 2021-05-01 08:30:00 |+---------------------------+---------------- -----+----------------------------+Nulldatum
Skickar
null
för datumet returnerarnull
:SELECT SUBDATE(null, INTERVAL 1 YEAR);
Resultat:
+--------------------------------+| SUBDATE(null, INTERVAL 1 ÅR) |+--------------------------------+| NULL |+--------------------------------+Argument saknas
Anropar
SUBDATE()
med fel antal argument, eller utan att skicka några argument resulterar i ett fel:SELECT SUBDATE();
Resultat:
ERROR 1064 (42000):Du har ett fel i din SQL-syntax; kontrollera manualen som motsvarar din MariaDB-serverversion för rätt syntax att använda nära ')' på rad 1