MariaDB inkluderer en masse dato- og tidsenheder, som du kan bruge, når du arbejder med dato- og tidsværdier. For eksempel MONTH
er en enhed og HOUR
er en anden enhed.
Nogle enheder er sammensatte enheder. Sammensatte enheder er, når to enheder bliver kombineret til én. Navnekonventionen er, at hvert enhedsnavn er adskilt af en understregning. For eksempel MINUTE_SECOND
er i minutter og sekunder.
Nedenfor er nogle eksempler, der viser, hvordan sammensatte enheder fungerer i MariaDB.
Liste over sammensatte enheder
For det første er her en liste over de sammensatte enheder, der er tilgængelige i MariaDB:
Enhed | Beskrivelse |
---|---|
SECOND_MICROSECOND | Seconds.Microseconds |
MINUTE_MICROSECOND | Minutter.Sekunder.Mikrosekunder |
MINUTE_SECOND | Minutter.sekunder |
HOUR_MICROSECOND | Timer.Minutter.Sekunder.Mikrosekunder |
HOUR_SECOND | Timer.Minutter.Sekunder |
HOUR_MINUTE | Timer.Minutter |
DAY_MICROSECOND | Dage Timer.Minuter.Sekunder.Mikrosekunder |
DAY_SECOND | Dage Timer.Minuter.Sekunder |
DAY_MINUTE | Dage Timer.Minutter |
DAY_HOUR | Dage timer |
YEAR_MONTH | År-måneder |
Bare at se på deres navne giver et ret godt fingerpeg om, hvad de laver.
Sammensatte enheder (som med enhver dato/tidsenhed) kan bruges, når du udtrækker dele af en dato/tidsværdi, og også når du gør ting som f.eks. at tilføje og trække et tidsinterval til en dato/tidsværdi.
Disse kan bruges med +
og -
operatorer, når der udføres aritmetik på datoer, med funktioner såsom ADDDATE()
, SUBDATE()
, DATE_ADD()
, DATE_SUB()
, EXTRACT()
, TIMESTAMPADD()
, og TIMESTAMPDIFF()
.
De kan også bruges i ON SCHEDULE
klausul af CREATE_EVENT()
og ALTER_EVENT()
funktioner.
Eksempel – Udpakning af sammensatte enheder
Dato- og tidsenheder kan bruges med en masse forskellige funktioner og i forskellige andre sammenhænge. En af de funktioner, der accepterer disse enheder, er EXTRACT()
fungere. Denne funktion returnerer en specificeret dato/tidsenhed fra en given dato eller dato/tidsværdi.
Her er et eksempel på brug af en sammensat enhed til at udtrække år og måned fra en dato:
SELECT EXTRACT(YEAR_MONTH FROM '2030-12-25');
Resultat:
+---------------------------------------+ | EXTRACT(YEAR_MONTH FROM '2030-12-25') | +---------------------------------------+ | 203012 | +---------------------------------------+
Vi kan se, at år og måned returneres som én værdi.
Eksempel – Tilføjelse/fradrag af sammensatte enheder
Sammensatte enheder kan også bruges til at tilføje og trække dato- og tidsintervaller fra.
Eksempel:
SELECT '2030-12-25' + INTERVAL '2:08' DAY_HOUR;
Resultat:
+-----------------------------------------+ | '2030-12-25' + INTERVAL '2:08' DAY_HOUR | +-----------------------------------------+ | 2030-12-27 08:00:00 | +-----------------------------------------+
I dette tilfælde er der to dele at være opmærksom på med hensyn til den sammensatte enhed.
Som i det foregående eksempel brugte vi en sammensat enhed (i dette tilfælde DAY_HOUR
). Med hensyn til det faktiske interval, der skal tilføjes, brugte vi et kolon til at adskille hver side af den sammensatte enhed.
I dette tilfælde specificerede vi '2:08'
, hvilket tilføjede 2 dage og 8 timer til datoværdien. Den oprindelige dato har ikke en tidsdel, og det antages derfor, at det oprindelige tidspunkt er 00:00:00
.
MariaDB er rimeligt tilgivende med formatets strenghed. Vi kan få den samme effekt ved at bruge forskellige separatorer, og også ved at udelade det indledende nul.
Her er et andet eksempel, der bruger DATE_ADD()
funktion med forskellige tidsintervaller:
SELECT DATE_ADD('2030-12-25', INTERVAL '2!8' DAY_HOUR);
Resultat:
+-------------------------------------------------+ | DATE_ADD('2030-12-25', INTERVAL '2!8' DAY_HOUR) | +-------------------------------------------------+ | 2030-12-27 08:00:00 | +-------------------------------------------------+
Her er nogle flere eksempler på forskellige sammensatte enheder:
SELECT
DATE_ADD('2021-05-01 10:00:00', INTERVAL '1:2' YEAR_MONTH) AS "YEAR_MONTH",
DATE_ADD('2021-05-01 10:00:00', INTERVAL '1:25:35' HOUR_SECOND) AS "HOUR_SECOND",
DATE_ADD('2021-05-01 10:00:00', INTERVAL '1:30' DAY_MINUTE) AS "DAY_MINUTE";
Resultat:
+---------------------+---------------------+---------------------+ | YEAR_MONTH | HOUR_SECOND | DAY_MINUTE | +---------------------+---------------------+---------------------+ | 2022-07-01 10:00:00 | 2021-05-01 11:25:35 | 2021-05-01 11:30:00 | +---------------------+---------------------+---------------------+