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

HOUR() vs EXTRACT(HOUR …) i MariaDB:Hvad er forskellen?

MariaDB har en HOUR() funktion, der udtrækker timedelen fra en tidsværdi. MariaDB har også en EXTRACT() funktion, der også kan udtrække timedelen fra en tidsværdi.

Disse funktioner returnerer dog ikke altid det samme resultat.

Læs videre for at se forskellen mellem HOUR() og EXTRACT(HOUR FROM ...) i MariaDB.

Forskellen

HOUR() og EXTRACT(HOUR FROM ...) begge returnerer den samme værdi, når tidsudtrykket er et tidspunkt på dagen. Det vil sige, hvis timedelen er mellem 0 og 23 , så returnerer de det samme resultat.

Forskellen viser sig, når timedelen er større end 23 .

TIME værdier kan være i området '-838:59:59.999999' til '838:59:59.999999' , men en værdi for tidspunktet på dagen kan kun være mellem 0 og 23 .

Hvis tidsudtrykket er uden for 0 og 23 rækkevidde:

  • HOUR() returnerer den faktiske timedel fra udtrykket (så længe det er inden for området '-838:59:59.999999' til '838:59:59.999999' – hvis uden for dette område, returnerer det 838 )
  • EXTRACT(HOUR FROM ...) returnerer en værdi mellem 0 og 23 . Hvis timen er uden for dette interval, EXTRACT() vil iterere gennem 0 og 23 så mange gange som nødvendigt for at returnere en værdi mellem 0 og 23 .

Eksempel

Her er et eksempel til at demonstrere.

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 returnerer den faktiske time, der blev angivet, mens EXTRACT() returnerer 0 . Dette er fordi 24 er højere end 23 , som er den højeste værdi EXTRACT() vender tilbage til timeportionen. I dette tilfælde EXTRACT() starter optællingen igen, startende ved 0 .

Det vil blive ved med at gøre dette så mange gange, som det skal, så resultatet altid er mellem 0 og 23 .

Her er endnu et eksempel med en meget større timedel:

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. SQL-OPDATERING for begyndere

  2. Hvad er den bedste måde at finde ud af, hvilken version af Oracle-klienten jeg kører på?

  3. Hvad er den bedste praksis for at bruge en GUID som en primær nøgle, specifikt med hensyn til ydeevne?

  4. Hvordan SUBSTRING() virker i MariaDB