sql >> Databasteknik >  >> RDS >> MariaDB

HOUR() vs EXTRACT(HOUR …) i MariaDB:Vad är skillnaden?

MariaDB har en HOUR() funktion som extraherar timdelen från ett tidsvärde. MariaDB har också en EXTRACT() funktion som också kan extrahera timdelen från ett tidsvärde.

Dessa funktioner ger dock inte alltid samma resultat.

Läs vidare för att se skillnaden mellan HOUR() och EXTRACT(HOUR FROM ...) i MariaDB.

Skillnaden

HOUR() och EXTRACT(HOUR FROM ...) båda returnerar samma värde när tidsuttrycket är ett tidsuttryck. Det vill säga om timdelen är mellan 0 och 23 , då returnerar de samma resultat.

Skillnaden visar sig när timdelen är större än 23 .

TIME värden kan ligga inom intervallet '-838:59:59.999999' till '838:59:59.999999' , men ett värde för tid på dagen kan bara vara mellan 0 och 23 .

Om tidsuttrycket är utanför 0 och 23 intervall:

  • HOUR() returnerar den faktiska timdelen från uttrycket (så länge den ligger inom intervallet '-838:59:59.999999' till '838:59:59.999999' – om det ligger utanför detta intervall returnerar det 838 )
  • EXTRACT(HOUR FROM ...) returnerar ett värde mellan 0 och 23 . Om timmen är utanför detta intervall, EXTRACT() kommer att upprepas genom 0 och 23 så många gånger som behövs för att returnera ett värde mellan 0 och 23 .

Exempel

Här är ett exempel att visa.

SELECT 
    HOUR('24:00:00'),
    EXTRACT(HOUR FROM '24:00:00');

Resultat:

+------------------+-------------------------------+
| HOUR('24:00:00') | EXTRACT(HOUR FROM '24:00:00') |
+------------------+-------------------------------+
|               24 |                             0 |
+------------------+-------------------------------+

HOUR() funktion returnerar den faktiska timmen som angavs, medan EXTRACT() returnerar 0 . Detta beror på att 24 är högre än 23 , vilket är det högsta värdet EXTRACT() kommer tillbaka för timdelen. I det här fallet, EXTRACT() startar räkningen igen, med start vid 0 .

Det kommer att fortsätta göra detta så många gånger som det behöver, så att resultatet alltid är mellan 0 och 23 .

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

SELECT 
    HOUR('742:00:00'),
    EXTRACT(HOUR FROM '742:00:00');

Resultat:

+-------------------+--------------------------------+
| HOUR('742:00:00') | EXTRACT(HOUR FROM '742:00:00') |
+-------------------+--------------------------------+
|               742 |                             22 |
+-------------------+--------------------------------+


  1. Skapa en PostgreSQL-användare och lägga till dem i en databas

  2. Behöver ordna anställdas namn enligt deras stad kolumnvis

  3. Hur vet man vilken partition som kommer att användas i Postgres hashpartitionering?

  4. Hur man frågar en CLOB-kolumn i Oracle