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 |
+-------------------+--------------------------------+