sql >> Databasteknik >  >> RDS >> MariaDB

4 funktioner för att få timmen från ett tidsvärde i MariaDB

Nedan finns 4 funktioner som gör att du kan returnera timmen från ett tidsvärde i MariaDB.

HOUR() Funktion

HOUR() funktion returnerar timmen för en given TIME eller DATETIME uttryck. Den accepterar ett argument, vilket är tiden du vill extrahera timmen från.

Exempel:

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

Resultat:

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

För tid-på-dagen-värden returnerar den timmen som ett tal i intervallet 0 till 23 . Men intervallet TIME värden kan vara mycket större, och därför kan det returnerade värdet vara mycket högre än 23 . Närmare bestämt TIME värden kan ligga inom intervallet '-838:59:59.999999' till '838:59:59.999999' .

Här är ett exempel med en större timdel:

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

Resultat:

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

Om tiden är utanför det accepterade intervallet för TIME värden är returvärdet 838 med en varning.

TIME värden kan också vara negativa. I sådana fall HOUR() returnerar ett positivt värde.

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 timmen (liksom andra enheter) från tidsvärdet.

Exempel:

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

Resultat:

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

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 timmen (samt minuter och sekunder) från tiden. Det finns olika alternativ för att returnera timmen.

Här är ett exempel som returnerar timmen i olika 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    |
+------+------+------+------+------+

Här är en beskrivning av var och en av dessa formatspecifikationer:

Formatspecifikation Beskrivning
%H Timme med 2 siffror mellan 00-23.
%h Timme med 2 siffror mellan 01-12.
%I Timme med 2 siffror mellan 01-12.
%k Timme med 1 siffra mellan 0-23.
%l Timme med 1 siffra mellan 1-12.

TIME_FORMAT() funktion accepterar en delmängd av formatsträngarna som kan användas med DATE_FORMAT() fungera. 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. 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 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    |
+------+------+------+------+------+

Passar bara en TIME värdet minskar inte riktigt med den här funktionen:

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)

Visa varningarna:

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. Hämtar en rad, en kolumn med PDO

  2. Enklaste sättet att göra en rekursiv självanslutning?

  3. ORA-00972 identifierare är för långt alias kolumnnamn

  4. Förbättringar av framstegsrapportering i PostgreSQL 12