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

4 funktioner til at få timen fra en tidsværdi i MariaDB

Nedenfor er 4 funktioner, der gør dig i stand til at returnere timen fra en tidsværdi i MariaDB.

HOUR() Funktion

HOUR() funktion returnerer timen for en given TIME eller DATETIME udtryk. Den accepterer ét argument, som er det tidspunkt, du vil udtrække timen fra.

Eksempel:

SELECT HOUR('03:45:30');

Resultat:

+------------------+
| HOUR('03:45:30') |
+------------------+
|                3 |
+------------------+

For klokkeslætsværdier returnerer den timen som et tal i området 0 til 23 . Men intervallet TIME værdier kan være meget større, og derfor kan den returnerede værdi være meget højere end 23 . Nærmere bestemt TIME værdier kan være i området '-838:59:59.999999' til '838:59:59.999999' .

Her er et eksempel med en større timedel:

SELECT HOUR('838:45:30');

Resultat:

+-------------------+
| HOUR('838:45:30') |
+-------------------+
|               838 |
+-------------------+

Hvis tiden er uden for det accepterede interval for TIME værdier, er returværdien 838 med en advarsel.

TIME værdier kan også være negative. I sådanne tilfælde HOUR() returnerer en positiv værdi.

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 timen (såvel som andre enheder) fra tidsværdien.

Eksempel:

SELECT EXTRACT(HOUR FROM '10:47:01');

Resultat:

+-------------------------------+
| EXTRACT(HOUR FROM '10:47:01') |
+-------------------------------+
|                            10 |
+-------------------------------+

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 timen (samt minutter og sekunder) fra tidspunktet. Der er forskellige muligheder for at returnere timen.

Her er et eksempel, der returnerer timen i forskellige former:

SELECT 
    TIME_FORMAT('18:45:30', '%H') AS '%H',
    TIME_FORMAT('18:45:30', '%h') AS '%h',
    TIME_FORMAT('18:45:30', '%I') AS '%I',
    TIME_FORMAT('18:45:30', '%k') AS '%k',
    TIME_FORMAT('18:45:30', '%l') AS '%l';

Resultat:

+------+------+------+------+------+
| %H   | %h   | %I   | %k   | %l   |
+------+------+------+------+------+
| 18   | 06   | 06   | 18   | 6    |
+------+------+------+------+------+

Her er en beskrivelse af hver af disse formatspecifikationer:

Formatspecifikation Beskrivelse
%H Time med 2 cifre mellem 00-23.
%h Time med 2 cifre mellem 01-12.
%I Time med 2 cifre mellem 01-12.
%k Time med 1 cifre mellem 0-23.
%l Time med 1 cifre mellem 1-12.

TIME_FORMAT() funktion accepterer et undersæt af formatstrengene, der kan bruges med DATE_FORMAT() fungere. Se MariaDB Format Strings for en komplet liste over formatstrenge/specifikationer, der kan bruges med DATE_FORMAT() . TIME_FORMAT() Funktionen accepterer kun formatangivelser for timer, minutter og sekunder. 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 18:45:30', '%H') AS '%H',
    DATE_FORMAT('2023-01-01 18:45:30', '%h') AS '%h',
    DATE_FORMAT('2023-01-01 18:45:30', '%I') AS '%I',
    DATE_FORMAT('2023-01-01 18:45:30', '%k') AS '%k',
    DATE_FORMAT('2023-01-01 18:45:30', '%l') AS '%l';

Resultat:

+------+------+------+------+------+
| %H   | %h   | %I   | %k   | %l   |
+------+------+------+------+------+
| 18   | 06   | 06   | 18   | 6    |
+------+------+------+------+------+

Sender kun en TIME værdi skærer det ikke helt med denne funktion:

SELECT 
    DATE_FORMAT('18:45:30', '%H') AS '%H',
    DATE_FORMAT('18:45:30', '%h') AS '%h',
    DATE_FORMAT('18:45:30', '%I') AS '%I',
    DATE_FORMAT('18:45:30', '%k') AS '%k',
    DATE_FORMAT('18:45:30', '%l') AS '%l';

Resultat:

+------+------+------+------+------+
| %H   | %h   | %I   | %k   | %l   |
+------+------+------+------+------+
| NULL | NULL | NULL | NULL | NULL |
+------+------+------+------+------+
1 row in set, 5 warnings (0.000 sec)

Vis advarslerne:

SHOW WARNINGS;

Resultat:

+---------+------+--------------------------------------+
| Level   | Code | Message                              |
+---------+------+--------------------------------------+
| Warning | 1292 | Incorrect datetime value: '18:45:30' |
| Warning | 1292 | Incorrect datetime value: '18:45:30' |
| Warning | 1292 | Incorrect datetime value: '18:45:30' |
| Warning | 1292 | Incorrect datetime value: '18:45:30' |
| Warning | 1292 | Incorrect datetime value: '18:45:30' |
+---------+------+--------------------------------------+

  1. SQL Server Process Queue Race Condition

  2. Modellering af en database til registrering af salg. Del 1

  3. Dynamisk SQL resulterer i midlertidig tabel i SQL Stored procedure

  4. Hvad svarer til Oracle Dual-tabellen i MS SqlServer?