MariaDB
 sql >> база данни >  >> RDS >> MariaDB

HOUR() срещу EXTRACT(HOUR ...) в MariaDB:Каква е разликата?

MariaDB има HOUR() функция, която извлича часовата част от времева стойност. MariaDB също има EXTRACT() функция, която може също да извлече частта от часа от времева стойност.

Тези функции обаче не винаги връщат един и същ резултат.

Прочетете, за да видите разликата между HOUR() и EXTRACT(HOUR FROM ...) в MariaDB.

Разликата

HOUR() и EXTRACT(HOUR FROM ...) и двете връщат една и съща стойност, когато изразът за време е израз за време от деня. Тоест, ако часовата част е между 0 и 23 , след което те връщат същия резултат.

Разликата се проявява, когато часовата част е по-голяма от 23 .

TIME стойностите могат да бъдат в диапазона '-838:59:59.999999' до '838:59:59.999999' , но стойността за час от деня може да бъде само между 0 и 23 .

Ако изразът за време е извън 0 и 23 диапазон:

  • HOUR() връща действителната част от часа от израза (стига да е в диапазона '-838:59:59.999999' до '838:59:59.999999' – ако е извън този диапазон, връща 838 )
  • EXTRACT(HOUR FROM ...) връща стойност между 0 и 23 . Ако часът е извън този диапазон, EXTRACT() ще повтори през 0 и 23 толкова пъти, колкото е необходимо, за да се върне стойност между 0 и 23 .

Пример

Ето пример за демонстрация.

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

Резултат:

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

HOUR() функцията връща действителния час, който е предоставен, докато EXTRACT() връща 0 . Това е така, защото 24 е по-високо от 23 , което е най-високата стойност EXTRACT() ще се върне за часовата част. В този случай EXTRACT() започва отново броенето, започвайки от 0 .

Той ще продължи да прави това толкова пъти, колкото е необходимо, така че резултатът винаги да е между 0 и 23 .

Ето още един пример с много по-голяма част от часа:

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

Резултат:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL срещу MariaDB срещу Percona Server:Сравнение на функциите за сигурност

  2. MariaDB JSON_SET() Обяснено

  3. Ръководство за автоматизация на бази данни с Severalnines ClusterControl

  4. MariaDB JSON_DEPTH() Обяснено

  5. Разбиране на ефектите от високата латентност в решенията MySQL и MariaDB с висока достъпност