MariaDB má několik funkcí, které vám umožňují extrahovat různé části data a času z hodnot data/času. V případě potřeby je můžete použít k oddělení každé složky data/času do vlastního sloupce.
Níže jsou čtyři způsoby, jak extrahovat hodiny, minuty a sekundy z časové hodnoty v MariaDB. Jako bonus zahrneme také mikrosekundy.
HOUR()
, MINUTE()
, SECOND()
a MICROSECOND()
Funkce
HOUR()
, MINUTE()
a SECOND()
funkce extrahují hodiny, minuty a sekundy z hodnoty data nebo data a času.
A pokud pracujete s vyšší přesností, můžete použít MICROSECOND()
funkce pro návrat mikrosekundové části.
Zde je příklad použití těchto funkcí k vrácení každé časové složky v jejím vlastním sloupci:
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";
Výsledek:
+-------+---------+---------+--------------+ | Hours | Minutes | Seconds | Microseconds | +-------+---------+---------+--------------+ | 10 | 45 | 30 | 123456 | +-------+---------+---------+--------------+
TIME
hodnoty mohou být v rozsahu '-838:59:59.999999'
na '838:59:59.999999'
.
TIME
hodnoty mohou být i záporné. V takových případech jsou návratové hodnoty stále kladné.
Zde je záporná časová hodnota:
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";
Výsledek:
+-------+---------+---------+--------------+ | Hours | Minutes | Seconds | Microseconds | +-------+---------+---------+--------------+ | 10 | 45 | 30 | 123456 | +-------+---------+---------+--------------+
EXTRACT()
Funkce
EXTRACT()
Funkce umožňuje extrahovat zadanou jednotku z hodnoty data/času. Proto jej můžete použít k extrahování hodin, minut, sekund a mikrosekund z časové hodnoty.
Příklad:
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";
Výsledek:
+-------+---------+---------+--------------+ | Hours | Minutes | Seconds | Microseconds | +-------+---------+---------+--------------+ | 10 | 45 | 30 | 123456 | +-------+---------+---------+--------------+
TIME_FORMAT()
Funkce
TIME_FORMAT()
Funkce umožňuje formátovat časovou hodnotu na základě formátovacího řetězce. Formátovací řetězec určuje, jak má být formátován čas.
Tuto funkci tedy můžete použít k samostatnému návratu různých časových částí.
Příklad:
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";
Výsledek:
+-------+---------+---------+--------------+ | Hours | Minutes | Seconds | Microseconds | +-------+---------+---------+--------------+ | 10 | 07 | 30 | 123456 | +-------+---------+---------+--------------+
Je také možné vrátit všechny časové složky samostatně, ale ve stejném sloupci.
Zde je příklad toho, co mám na mysli:
SELECT TIME_FORMAT('10:07:30.123456', '%H %i %s %f');
Výsledek:
+-----------------------------------------------+ | TIME_FORMAT('10:07:30.123456', '%H %i %s %f') | +-----------------------------------------------+ | 10 07 30 123456 | +-----------------------------------------------+
TIME_FORMAT()
funkce přijímá podmnožinu formátovacích řetězců, které lze použít s DATE_FORMAT()
funkce.
Existuje několik možných specifikátorů formátu pro hodinovou část. Výše použitý specifikátor formátu vrací hodinu se dvěma číslicemi mezi 00
a 23
. Úplný seznam formátovacích řetězců/specifikátorů, které lze použít s DATE_FORMAT()
, najdete v části MariaDB Format Strings . TIME_FORMAT()
funkce přijímá pouze specifikátory formátu pro hodiny, minuty a sekundy/subsekundy. Jakýkoli jiný specifikátor formátu má za následek null
nebo 0
se vrací.
DATE_FORMAT()
Funkce
DATE_FORMAT()
Funkce umožňuje formátovat hodnotu data nebo data a času na základě formátovacího řetězce. Formátovací řetězec určuje, jak má být formátován datum/čas.
Můžeme tedy použít stejné specifikátory formátu, které jsme použili u TIME_FORMAT()
funkce v předchozím příkladu. Nicméně DATE_FORMAT()
nepřijímá TIME
hodnotu, takže budeme muset předat DATETIME
hodnotu.
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";
Výsledek:
+-------+---------+---------+--------------+ | Hours | Minutes | Seconds | Microseconds | +-------+---------+---------+--------------+ | 10 | 07 | 30 | 123456 | +-------+---------+---------+--------------+
Předání jen TIME
value s touto funkcí nefunguje:
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";
Výsledek:
+-------+---------+---------+--------------+ | Hours | Minutes | Seconds | Microseconds | +-------+---------+---------+--------------+ | NULL | NULL | NULL | NULL | +-------+---------+---------+--------------+ 1 row in set, 4 warnings (0.003 sec)
Podívejme se na varování:
SHOW WARNINGS;
Výsledek:
+---------+------+---------------------------------------------+ | 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' | +---------+------+---------------------------------------------+