sql >> Databáze >  >> RDS >> MariaDB

4 způsoby, jak oddělit hodiny, minuty a sekundy od časové hodnoty v MariaDB

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

  1. Zabezpečte své Mongo Clusters pomocí SSL

  2. Minimální protokolování pomocí INSERT…SELECT do prázdných seskupených tabulek

  3. Porovnání Load Balancerů pro PostgreSQL

  4. Jak předefinovat sloupce vrácené uloženou procedurou na serveru SQL Server