I MariaDB, DATE_SUB()
är en inbyggd datum- och tidsfunktion som låter dig subtrahera ett belopp från ett 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 datumet, istället för att subtrahera från det.
Syntax
Syntaxen ser ut så här:
DATE_SUB(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).
Exempel
Här är ett grundläggande exempel:
SELECT DATE_SUB('2021-05-31 10:00:00', INTERVAL 1 HOUR);
Resultat:
+--------------------------------------------------+ | DATE_SUB('2021-05-31 10:00:00', INTERVAL 1 HOUR) | +--------------------------------------------------+ | 2021-05-31 09:00:00 | +--------------------------------------------------+
Det är som att göra följande:
SELECT '2021-05-31 10:00:00' - INTERVAL 1 HOUR;
Resultat:
+-----------------------------------------+ | '2021-05-31 10:00:00' - INTERVAL 1 HOUR | +-----------------------------------------+ | 2021-05-31 09:00:00 | +-----------------------------------------+
Negativa intervall
Ange ett negativt intervall lägger till det beloppet från datumet.
Exempel:
SELECT DATE_SUB('2021-05-31 10:00:00', INTERVAL -1 HOUR);
Resultat:
+---------------------------------------------------+ | DATE_SUB('2021-05-31 10:00:00', INTERVAL -1 HOUR) | +---------------------------------------------------+ | 2021-05-31 11:00:00 | +---------------------------------------------------+
Övriga enheter
Här är ett exempel som lägger till ett intervall på 1 till de olika datum- och tidsenheterna:
SELECT
DATE_SUB('2021-05-10 10:00:00', INTERVAL 1 YEAR) AS YEAR,
DATE_SUB('2021-05-10 10:00:00', INTERVAL 1 MONTH) AS MONTH,
DATE_SUB('2021-05-10 10:00:00', INTERVAL 1 DAY) AS DAY,
DATE_SUB('2021-05-10 10:00:00', INTERVAL 1 HOUR) AS HOUR,
DATE_SUB('2021-05-10 10:00:00', INTERVAL 1 MINUTE) AS MINUTE,
DATE_SUB('2021-05-10 10:00:00', INTERVAL 1 SECOND) AS SECOND,
DATE_SUB('2021-05-10 10:00:00', INTERVAL 1 MICROSECOND) AS MICROSECOND;
Resultat (med vertikal utdata):
YEAR: 2020-05-10 10:00:00 MONTH: 2021-04-10 10:00:00 DAY: 2021-05-09 10:00:00 HOUR: 2021-05-10 09:00:00 MINUTE: 2021-05-10 09:59:00 SECOND: 2021-05-10 09:59:59 MICROSECOND: 2021-05-10 09:59:59.999999
Kompositenheter
Här är ett exempel som använder sammansatta enheter:
SELECT
DATE_SUB('2021-05-01 10:00:00', INTERVAL '1:2' YEAR_MONTH) AS "YEAR_MONTH",
DATE_SUB('2021-05-01 10:00:00', INTERVAL '1:25:35' HOUR_SECOND) AS "HOUR_SECOND",
DATE_SUB('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 returnerar null
:
SELECT DATE_SUB(null, INTERVAL 1 YEAR);
Resultat:
+---------------------------------+ | DATE_SUB(null, INTERVAL 1 YEAR) | +---------------------------------+ | NULL | +---------------------------------+
Argument saknas
Ringer DATE_SUB()
med fel antal argument, eller utan att skicka några argument resulterar i ett fel:
SELECT DATE_SUB();
Resultat:
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