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