MariaDB innehåller ett gäng datum- och tidsenheter som du kan använda när du arbetar med datum- och tidsvärden. Till exempel MONTH
är en enhet och HOUR
är en annan enhet.
Vissa enheter är sammansatta enheter. Sammansatta enheter är när två enheter kombineras till en. Namnkonventionen är att varje enhetsnamn separeras med ett understreck. Till exempel, MINUTE_SECOND
är för minuter och sekunder.
Nedan finns några exempel som visar hur sammansatta enheter fungerar i MariaDB.
Lista över sammansatta enheter
Först, här är en lista över de sammansatta enheterna som är tillgängliga i MariaDB:
Enhet | Beskrivning |
---|---|
SECOND_MICROSECOND | Seconds.Microseconds |
MINUTE_MICROSECOND | Minutes.Seconds.Microseconds |
MINUTE_SECOND | Minuter.sekunder |
HOUR_MICROSECOND | Timmar.Minuter.Sekunder.Mikrosekunder |
HOUR_SECOND | Timmar.Minuter.Sekunder |
HOUR_MINUTE | Timmar.Minuter |
DAY_MICROSECOND | Dagar Timmar.Minuter.Sekunder.Mikrosekunder |
DAY_SECOND | Dagar Timmar.Minuter.Sekunder |
DAY_MINUTE | Dagar Timmar.Minuter |
DAY_HOUR | Dags timmar |
YEAR_MONTH | År-månader |
Att bara titta på deras namn ger en ganska bra ledtråd om vad de gör.
Sammansatta enheter (som med vilken datum/tidsenhet som helst) kan användas när man extraherar delar av ett datum/tidsvärde, och även när man gör saker som att lägga till och subtrahera ett tidsintervall till ett datum/tidsvärde.
Dessa kan användas med +
och -
operatorer när man utför aritmetik på datum, med funktioner som ADDDATE()
, SUBDATE()
, DATE_ADD()
, DATE_SUB()
, EXTRACT()
, TIMESTAMPADD()
, och TIMESTAMPDIFF()
.
De kan också användas i ON SCHEDULE
sats i CREATE_EVENT()
och ALTER_EVENT()
funktioner.
Exempel – Extrahera sammansatta enheter
Datum- och tidsenheter kan användas med en mängd olika funktioner och i olika andra sammanhang. En av funktionerna som accepterar dessa enheter är EXTRACT()
fungera. Den här funktionen returnerar en angiven datum-/tidsenhet från ett givet datum eller datetime-värde.
Här är ett exempel på hur man använder en sammansatt enhet för att extrahera år och månad från ett datum:
SELECT EXTRACT(YEAR_MONTH FROM '2030-12-25');
Resultat:
+---------------------------------------+ | EXTRACT(YEAR_MONTH FROM '2030-12-25') | +---------------------------------------+ | 203012 | +---------------------------------------+
Vi kan se att år och månad returneras som ett värde.
Exempel – Lägga till/subtrahera sammansatta enheter
Sammansatta enheter kan också användas för att lägga till och subtrahera datum och tidsintervall.
Exempel:
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 det här fallet finns det två delar att tänka på när det gäller den sammansatta enheten.
Som i föregående exempel använde vi en sammansatt enhet (i det här fallet DAY_HOUR
). När det gäller det faktiska intervallet att lägga till, använde vi ett kolon för att separera varje sida av den sammansatta enheten.
I det här fallet angav vi '2:08'
, vilket lade till 2 dagar och 8 timmar till datumvärdet. Det ursprungliga datumet har ingen tidsdel, så det antas att den initiala tiden är 00:00:00
.
MariaDB är rimligt förlåtande med formatets stränghet. Vi kan få samma effekt genom att använda olika separatorer, och även genom att utelämna den inledande nollan.
Här är ett annat exempel som använder DATE_ADD()
funktion med olika tidsintervall:
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 | +-------------------------------------------------+
Här är några fler exempel på olika sammansatta enheter:
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 | +---------------------+---------------------+---------------------+