MariaDB heeft verschillende functies waarmee u verschillende datum- en tijddelen uit datum/tijd-waarden kunt extraheren. U kunt deze gebruiken om elke datum/tijd-component indien nodig in een eigen kolom te scheiden.
Hieronder staan vier manieren om de uren, minuten en seconden uit een tijdwaarde in MariaDB te extraheren. Als bonus voegen we ook microseconden toe.
Het HOUR()
, MINUTE()
, SECOND()
en MICROSECOND()
Functies
Het HOUR()
, MINUTE()
, en SECOND()
functies extraheren de uren, minuten en seconden uit respectievelijk een datum- of datetime-waarde.
En als u met een hogere precisie werkt, kunt u de MICROSECOND()
. gebruiken functie om het deel van de microseconden terug te geven.
Hier is een voorbeeld van het gebruik van deze functies om elke tijdcomponent in zijn eigen kolom te retourneren:
SELECT
HOUR('10:45:30.123456') AS "Hours",
MINUTE('10:45:30.123456') AS "Minutes",
SECOND('10:45:30.123456') AS "Seconds",
MICROSECOND('10:45:30.123456') AS "Microseconds";
Resultaat:
+-------+---------+---------+--------------+ | Hours | Minutes | Seconds | Microseconds | +-------+---------+---------+--------------+ | 10 | 45 | 30 | 123456 | +-------+---------+---------+--------------+
TIME
waarden kunnen in het bereik liggen '-838:59:59.999999'
naar '838:59:59.999999'
.
TIME
waarden kunnen ook negatief zijn. In dergelijke gevallen zijn de retourwaarden nog steeds positief.
Hier is een negatieve tijdwaarde:
SELECT
HOUR('-10:45:30.123456') AS "Hours",
MINUTE('-10:45:30.123456') AS "Minutes",
SECOND('-10:45:30.123456') AS "Seconds",
MICROSECOND('-10:45:30.123456') AS "Microseconds";
Resultaat:
+-------+---------+---------+--------------+ | Hours | Minutes | Seconds | Microseconds | +-------+---------+---------+--------------+ | 10 | 45 | 30 | 123456 | +-------+---------+---------+--------------+
De EXTRACT()
Functie
De EXTRACT()
Met deze functie kunt u een gespecificeerde eenheid extraheren uit de datum/tijd-waarde. Daarom kunt u het gebruiken om de uren, minuten, seconden en microseconden uit de tijdwaarde te extraheren.
Voorbeeld:
SELECT
EXTRACT(HOUR FROM '10:45:30.123456') AS "Hours",
EXTRACT(MINUTE FROM '10:45:30.123456') AS "Minutes",
EXTRACT(SECOND FROM '10:45:30.123456') AS "Seconds",
EXTRACT(MICROSECOND FROM '10:45:30.123456') AS "Microseconds";
Resultaat:
+-------+---------+---------+--------------+ | Hours | Minutes | Seconds | Microseconds | +-------+---------+---------+--------------+ | 10 | 45 | 30 | 123456 | +-------+---------+---------+--------------+
De TIME_FORMAT()
Functie
De TIME_FORMAT()
Met deze functie kunt u een tijdwaarde opmaken op basis van een opmaakreeks. De format string geeft aan hoe de tijd moet worden geformatteerd.
U kunt deze functie dus gebruiken om de verschillende tijdsdelen afzonderlijk terug te geven.
Voorbeeld:
SELECT
TIME_FORMAT('10:07:30.123456', '%H') AS "Hours",
TIME_FORMAT('10:07:30.123456', '%i') AS "Minutes",
TIME_FORMAT('10:07:30.123456', '%s') AS "Seconds",
TIME_FORMAT('10:07:30.123456', '%f') AS "Microseconds";
Resultaat:
+-------+---------+---------+--------------+ | Hours | Minutes | Seconds | Microseconds | +-------+---------+---------+--------------+ | 10 | 07 | 30 | 123456 | +-------+---------+---------+--------------+
Het is ook mogelijk om alle tijdcomponenten afzonderlijk terug te geven, maar in dezelfde kolom.
Hier is een voorbeeld van wat ik bedoel:
SELECT TIME_FORMAT('10:07:30.123456', '%H %i %s %f');
Resultaat:
+-----------------------------------------------+ | TIME_FORMAT('10:07:30.123456', '%H %i %s %f') | +-----------------------------------------------+ | 10 07 30 123456 | +-----------------------------------------------+
De TIME_FORMAT()
functie accepteert een subset van de format strings die gebruikt kunnen worden met de DATE_FORMAT()
functie.
Er zijn verschillende mogelijke formaatspecificaties voor het uurgedeelte. De hierboven gebruikte formaatspecificatie retourneert het uur met twee cijfers tussen 00
en 23
. Zie MariaDB Format Strings voor een volledige lijst van format strings/specificaties die kunnen worden gebruikt met DATE_FORMAT()
. De TIME_FORMAT()
functie accepteert alleen formaatspecificaties voor uren, minuten en seconden/subseconden. Elke andere indelingsspecificatie resulteert in null
of 0
wordt geretourneerd.
De DATE_FORMAT()
Functie
De DATE_FORMAT()
Met deze functie kunt u een datum- of datetime-waarde opmaken op basis van een notatiereeks. De format string geeft aan hoe de datum/tijd moet worden opgemaakt.
We kunnen daarom dezelfde formaatspecificaties gebruiken die we gebruikten met de TIME_FORMAT()
functie in het vorige voorbeeld. Echter, DATE_FORMAT()
accepteert geen TIME
waarde, dus we moeten een DATETIME
. doorgeven waarde.
SELECT
DATE_FORMAT('2023-01-01 10:07:30.123456', '%H') AS "Hours",
DATE_FORMAT('2023-01-01 10:07:30.123456', '%i') AS "Minutes",
DATE_FORMAT('2023-01-01 10:07:30.123456', '%s') AS "Seconds",
DATE_FORMAT('2023-01-01 10:07:30.123456', '%f') AS "Microseconds";
Resultaat:
+-------+---------+---------+--------------+ | Hours | Minutes | Seconds | Microseconds | +-------+---------+---------+--------------+ | 10 | 07 | 30 | 123456 | +-------+---------+---------+--------------+
Slechts een TIME
voorbijgaan waarde werkt niet met deze functie:
SELECT
DATE_FORMAT('10:07:30.123456', '%H') AS "Hours",
DATE_FORMAT('10:07:30.123456', '%i') AS "Minutes",
DATE_FORMAT('10:07:30.123456', '%s') AS "Seconds",
DATE_FORMAT('10:07:30.123456', '%f') AS "Microseconds";
Resultaat:
+-------+---------+---------+--------------+ | Hours | Minutes | Seconds | Microseconds | +-------+---------+---------+--------------+ | NULL | NULL | NULL | NULL | +-------+---------+---------+--------------+ 1 row in set, 4 warnings (0.003 sec)
Laten we eens kijken naar de waarschuwing:
SHOW WARNINGS;
Resultaat:
+---------+------+---------------------------------------------+ | Level | Code | Message | +---------+------+---------------------------------------------+ | Warning | 1292 | Incorrect datetime value: '10:07:30.123456' | | Warning | 1292 | Incorrect datetime value: '10:07:30.123456' | | Warning | 1292 | Incorrect datetime value: '10:07:30.123456' | | Warning | 1292 | Incorrect datetime value: '10:07:30.123456' | +---------+------+---------------------------------------------+