sql >> Databasteknik >  >> RDS >> MariaDB

4 sätt att skilja timmar, minuter och sekunder från ett tidsvärde i MariaDB

MariaDB har flera funktioner som gör att du kan extrahera olika datum- och tidsdelar från datum/tidsvärden. Du kan använda dessa för att separera varje datum/tid-komponent i en egen kolumn om det behövs.

Nedan finns fyra sätt att extrahera timmar, minuter och sekunder från ett tidsvärde i MariaDB. Som en bonus inkluderar vi även mikrosekunder.

HOUR() , MINUTE() , SECOND() och MICROSECOND() Funktioner

HOUR() , MINUTE() , och SECOND() funktioner extraherar timmar, minuter och sekunder från ett datum respektive datum och tid.

Och om du arbetar med högre precision kan du använda MICROSECOND() funktion för att returnera mikrosekundersdelen.

Här är ett exempel på hur du använder dessa funktioner för att returnera varje tidskomponent i sin egen kolumn:

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";

Resultat:

+-------+---------+---------+--------------+
| Hours | Minutes | Seconds | Microseconds |
+-------+---------+---------+--------------+
|    10 |      45 |      30 |       123456 |
+-------+---------+---------+--------------+

TIME värden kan ligga inom intervallet '-838:59:59.999999' till '838:59:59.999999' .

TIME värden kan också vara negativa. I sådana fall är returvärdena fortfarande positiva.

Här är ett negativt tidsvärde:

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";

Resultat:

+-------+---------+---------+--------------+
| Hours | Minutes | Seconds | Microseconds |
+-------+---------+---------+--------------+
|    10 |      45 |      30 |       123456 |
+-------+---------+---------+--------------+

EXTRACT() Funktion

EXTRACT() funktionen låter dig extrahera en specificerad enhet från datum/tidsvärdet. Därför kan du använda den för att extrahera timmar, minuter, sekunder och mikrosekunder från tidsvärdet.

Exempel:

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";

Resultat:

+-------+---------+---------+--------------+
| Hours | Minutes | Seconds | Microseconds |
+-------+---------+---------+--------------+
|    10 |      45 |      30 |       123456 |
+-------+---------+---------+--------------+

TIME_FORMAT() Funktion

TIME_FORMAT() funktionen låter dig formatera ett tidsvärde baserat på en formatsträng. Formatsträngen anger hur tiden ska formateras.

Du kan därför använda denna funktion för att returnera de olika tidsdelarna separat.

Exempel:

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";

Resultat:

+-------+---------+---------+--------------+
| Hours | Minutes | Seconds | Microseconds |
+-------+---------+---------+--------------+
| 10    | 07      | 30      | 123456       |
+-------+---------+---------+--------------+

Det är också möjligt att returnera alla tidskomponenter separat, men i samma kolumn.

Här är ett exempel på vad jag menar:

SELECT TIME_FORMAT('10:07:30.123456', '%H %i %s %f');

Resultat:

+-----------------------------------------------+
| TIME_FORMAT('10:07:30.123456', '%H %i %s %f') |
+-----------------------------------------------+
| 10 07 30 123456                               |
+-----------------------------------------------+

TIME_FORMAT() funktion accepterar en delmängd av formatsträngarna som kan användas med DATE_FORMAT() fungera.

Det finns flera möjliga formatspecifikationer för timdelen. Formatspecifikationen som används ovan returnerar timmen med två siffror mellan 00 och 23 . Se MariaDB Format Strings för en fullständig lista över formatsträngar/specifikationer som kan användas med DATE_FORMAT() . TIME_FORMAT() Funktionen accepterar endast formatspecifikationer för timmar, minuter och sekunder/undersekunder. Alla andra formatspecifikationer resulterar i null eller 0 returneras.

DATE_FORMAT() Funktion

DATE_FORMAT() funktionen låter dig formatera ett datum- eller datumtidsvärde baserat på en formatsträng. Formatsträngen anger hur datum/tid ska formateras.

Vi kan därför använda samma formatspecifikationer som vi använde med TIME_FORMAT() funktion i föregående exempel. Men DATE_FORMAT() accepterar inte en TIME värde, så vi måste skicka en DATETIME värde.

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";

Resultat:

+-------+---------+---------+--------------+
| Hours | Minutes | Seconds | Microseconds |
+-------+---------+---------+--------------+
| 10    | 07      | 30      | 123456       |
+-------+---------+---------+--------------+

Passar bara en TIME värde fungerar inte med den här funktionen:

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";

Resultat:

+-------+---------+---------+--------------+
| Hours | Minutes | Seconds | Microseconds |
+-------+---------+---------+--------------+
| NULL  | NULL    | NULL    | NULL         |
+-------+---------+---------+--------------+
1 row in set, 4 warnings (0.003 sec)

Låt oss se varningen:

SHOW WARNINGS;

Resultat:

+---------+------+---------------------------------------------+
| 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. Heroku Postgresql med Google Datastudio

  2. Se och rensa Postgres cacher/buffertar?

  3. Oracle-databasen hänger oändligt i UPDATE-frågor

  4. Hur man skapar Array i PostgreSQL