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' | +---------+------+---------------------------------------------+