MariaDB 中的 HOUR() vs EXTRACT(HOUR ...):有什么区别?

发布于

MariaDB 有一个从时间值中提取小时部分的函数。MariaDB 还有一个函数,也可以从时间值中提取小时部分。HOUR()EXTRACT()

但是,这些函数并不总是返回相同的结果。

请继续阅读以了解 MariaDB 之间的区别。HOUR()``EXTRACT(HOUR FROM ...)

区别

当时间表达式是时间表达式时,两者返回相同的值。也就是说,如果小时部分介于 和 之间,则它们返回相同的结果。HOUR()``EXTRACT(HOUR FROM ...)``0``23

当小时部分大于 时,差异就会显现出来。23

TIME值的范围可以是 ,但时间值只能介于 和 之间。'-838:59:59.999999'``'838:59:59.999999'``0``23

如果时间表达式超出 and 范围:0``23

  • HOUR()从表达式返回实际的小时部分(只要它在 to 范围内 – 如果超出此范围,则返回'-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 |
+-------------------+--------------------------------+