I MariaDB, DATE_SUB()
er en indbygget dato- og tidsfunktion, der giver dig mulighed for at trække et beløb fra en 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 det.
Syntaks
Syntaksen ser sådan ud:
DATE_SUB(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.).
Eksempel
Her er et grundlæggende eksempel:
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 er ligesom at gøre følgende:
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 | +-----------------------------------------+
Negative intervaller
Angivelse af et negativt interval tilføjer dette beløb fra datoen.
Eksempel:
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 | +---------------------------------------------------+
Andre enheder
Her er et eksempel, der tilføjer et interval på 1 til de forskellige dato- og tidsenheder:
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 (ved hjælp af lodret output):
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
Sammensatte enheder
Her er et eksempel, der bruger sammensatte enheder:
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 | +---------------------+---------------------+---------------------+
Nulledatoer
Sender null
for datoen returnerer null
:
SELECT DATE_SUB(null, INTERVAL 1 YEAR);
Resultat:
+---------------------------------+ | DATE_SUB(null, INTERVAL 1 YEAR) | +---------------------------------+ | NULL | +---------------------------------+
Manglende argument
Kalder DATE_SUB()
med det forkerte antal argumenter, eller uden at sende nogen argumenter, resulterer det i en fejl:
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