In MariaDB, SUBDATE()
is een ingebouwde datum- en tijdfunctie die een bedrag aftrekt van een bepaalde datum.
Hiermee kunt u een datum wijzigen door de datum, de af te trekken eenheid en het af te trekken bedrag op te geven. U kunt een negatief bedrag doorgeven om toe te voegen naar de datum, in plaats van ervan af te trekken.
SUBDATE()
heeft ook een syntaxis voor sneltoetsen waarmee u de dagen kunt specificeren die moeten worden afgetrokken.
Syntaxis
De SUBDATE()
functie heeft twee syntaxis.
Syntaxis 1:
SUBDATE(expr,days)
Waar expr
is de datum, en days
is het aantal dagen dat moet worden afgetrokken.
Syntaxis 2:
SUBDATE(date,INTERVAL expr unit)
Waar date
is de datum om te veranderen, expr
is het af te trekken bedrag, en unit
is de datum/tijd-eenheid die moet worden afgetrokken (bijv. seconde, minuut, enz.).
Bij gebruik van deze syntaxis, SUBDATE()
is een synoniem voor DATE_SUB()
.
Voorbeeld – Syntaxis 1
Hier is een voorbeeld van het gebruik van de eerste syntaxis:
SELECT SUBDATE('2021-05-01', 1);
Resultaat:
+--------------------------+ | SUBDATE('2021-05-01', 1) | +--------------------------+ | 2021-04-30 | +--------------------------+
We kunnen indien nodig ook het tijdsgedeelte opnemen:
SELECT SUBDATE('2021-05-01 10:00:00', 1);
Resultaat:
+-----------------------------------+ | SUBDATE('2021-05-01 10:00:00', 1) | +-----------------------------------+ | 2021-04-30 10:00:00 | +-----------------------------------+
Hier zijn twee alternatieve manieren om hetzelfde te doen:
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";
Resultaat:
+---------------------+---------------------+ | Result 1 | Result 2 | +---------------------+---------------------+ | 2021-04-30 10:00:00 | 2021-04-30 10:00:00 | +---------------------+---------------------+
Voorbeeld – Syntaxis 2
Hier is een voorbeeld van het gebruik van de tweede syntaxis:
SELECT SUBDATE('2021-05-31 10:00:00', INTERVAL 1 HOUR);
Resultaat:
+-------------------------------------------------+ | SUBDATE('2021-05-31 10:00:00', INTERVAL 1 HOUR) | +-------------------------------------------------+ | 2021-05-31 09:00:00 | +-------------------------------------------------+
Met deze syntaxis kunnen we andere eenheden van de datum aftrekken (d.w.z. niet alleen de dagen). Hier heb ik een uur van de datum afgetrokken, maar ik had net zo goed minuten, seconden, maanden, dagen, jaren, enz. kunnen aftrekken. Voorbeelden later.
Hier zijn twee alternatieve methoden om hetzelfde resultaat te bereiken als in het bovenstaande voorbeeld:
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";
Resultaat:
+---------------------+---------------------+ | Result 1 | Result 2 | +---------------------+---------------------+ | 2021-05-31 09:00:00 | 2021-05-31 09:00:00 | +---------------------+---------------------+
Negatieve intervallen
Een negatief interval opgeven voegt toe dat bedrag tot de datum.
Voorbeeld:
SELECT SUBDATE('2021-05-31 10:00:00', INTERVAL -1 HOUR);
Resultaat:
+--------------------------------------------------+ | SUBDATE('2021-05-31 10:00:00', INTERVAL -1 HOUR) | +--------------------------------------------------+ | 2021-05-31 11:00:00 | +--------------------------------------------------+
Andere eenheden
Hier is een voorbeeld dat een interval van 1 aftrekt van de verschillende datum- en tijdseenheden:
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;
Resultaat (met verticale uitvoer):
YEAR: 2020-05-01 10:00:00 MONTH: 2021-04-01 10:00:00 DAY: 2021-04-30 10:00:00 HOUR: 2021-05-01 09:00:00 MINUTE: 2021-05-01 09:59:00 SECOND: 2021-05-01 09:59:59 MICROSECOND: 2021-05-01 09:59:59.999999
Samengestelde eenheden
Hier is een voorbeeld dat samengestelde eenheden gebruikt:
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";
Resultaat:
+---------------------+---------------------+---------------------+ | YEAR_MONTH | HOUR_SECOND | DAY_MINUTE | +---------------------+---------------------+---------------------+ | 2020-03-01 10:00:00 | 2021-05-01 08:34:25 | 2021-05-01 08:30:00 | +---------------------+---------------------+---------------------+
Null-datums
Doorgeven van null
voor de datum retourneert null
:
SELECT SUBDATE(null, INTERVAL 1 YEAR);
Resultaat:
+--------------------------------+ | SUBDATE(null, INTERVAL 1 YEAR) | +--------------------------------+ | NULL | +--------------------------------+
Ontbrekend argument
SUBDATE()
. aanroepen met het verkeerde aantal argumenten, of zonder het doorgeven van argumenten resulteert in een fout:
SELECT SUBDATE();
Resultaat:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1