sql >> Database teknologi >  >> RDS >> MariaDB

4 måder at adskille timer, minutter og sekunder fra en tidsværdi i MariaDB

MariaDB har flere funktioner, der gør dig i stand til at udtrække forskellige dato- og tidsdele fra dato/tidsværdier. Du kan bruge disse til at adskille hver dato/klokkeslæt-komponent i sin egen kolonne, hvis det kræves.

Nedenfor er fire måder at udtrække timer, minutter og sekunder fra en tidsværdi i MariaDB. Som en bonus inkluderer vi også mikrosekunder.

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

HOUR() , MINUTE() , og SECOND() funktioner udtrækker timer, minutter og sekunder fra henholdsvis en dato- eller datotidsværdi.

Og hvis du arbejder med en højere præcision, kan du bruge MICROSECOND() funktion for at returnere mikrosekunderdelen.

Her er et eksempel på brug af disse funktioner til at returnere hver tidskomponent i sin egen kolonne:

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ærdier kan være i området '-838:59:59.999999' til '838:59:59.999999' .

TIME værdier kan også være negative. I sådanne tilfælde er returværdierne stadig positive.

Her er en negativ tidsværdi:

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 giver dig mulighed for at udtrække en specificeret enhed fra dato/tidsværdien. Derfor kan du bruge den til at udtrække timer, minutter, sekunder og mikrosekunder fra tidsværdien.

Eksempel:

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() funktion giver dig mulighed for at formatere en tidsværdi baseret på en formatstreng. Formatstrengen angiver, hvordan tiden skal formateres.

Du kan derfor bruge denne funktion til at returnere de forskellige tidsdele separat.

Eksempel:

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 er også muligt at returnere alle tidskomponenter separat, men i samme kolonne.

Her er et eksempel på, hvad jeg mener:

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 accepterer et undersæt af formatstrengene, der kan bruges med DATE_FORMAT() fungere.

Der er flere mulige formatangivelser for timedelen. Formatspecifikationen, der bruges ovenfor, returnerer timen med to cifre mellem 00 og 23 . Se MariaDB Format Strings for en komplet liste over formatstrenge/specifikationer, der kan bruges med DATE_FORMAT() . TIME_FORMAT() Funktionen accepterer kun formatspecifikationer for timer, minutter og sekunder/undersekunder. Enhver anden formatangivelse resulterer i null eller 0 bliver returneret.

DATE_FORMAT() Funktion

DATE_FORMAT() funktionen giver dig mulighed for at formatere en dato eller dato-tidsværdi baseret på en formatstreng. Formatstrengen angiver, hvordan dato/klokkeslæt skal formateres.

Vi kan derfor bruge de samme formatspecifikationer, som vi brugte med TIME_FORMAT() funktion i det foregående eksempel. Dog DATE_FORMAT() accepterer ikke en TIME værdi, så vi bliver nødt til at sende en DATETIME værdi.

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

Sender kun en TIME værdi virker ikke med denne funktion:

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)

Lad os se advarslen:

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. Oversigt over server-side programmering i PostgreSQL

  2. Indsæt hurtigt 2 millioner rækker i SQL Server

  3. MySQL ENUM type vs join tabeller

  4. Hent række hvor datetime column =today - SQL server noob