MariaDB có HOUR()
hàm trích xuất phần giờ từ một giá trị thời gian. MariaDB cũng có EXTRACT()
chức năng này cũng có thể trích xuất phần giờ từ một giá trị thời gian.
Tuy nhiên, không phải lúc nào các hàm này cũng trả về cùng một kết quả.
Đọc tiếp để biết sự khác biệt giữa HOUR()
và EXTRACT(HOUR FROM ...)
trong MariaDB.
Sự khác biệt
HOUR()
và EXTRACT(HOUR FROM ...)
cả hai đều trả về cùng một giá trị khi biểu thức thời gian là biểu thức thời gian trong ngày. Nghĩa là, nếu phần giờ nằm giữa 0
và 23
, sau đó chúng trả về cùng một kết quả.
Sự khác biệt thể hiện khi phần giờ lớn hơn 23
.
TIME
giá trị có thể nằm trong khoảng '-838:59:59.999999'
thành '838:59:59.999999'
, nhưng giá trị thời gian trong ngày chỉ có thể nằm trong khoảng 0
và 23
.
Nếu biểu thức thời gian nằm ngoài 0
và 23
phạm vi:
-
HOUR()
trả về phần giờ thực tế từ biểu thức (miễn là nó nằm trong phạm vi'-838:59:59.999999'
thành'838:59:59.999999'
- nếu nằm ngoài phạm vi này, nó trả về838
) -
EXTRACT(HOUR FROM ...)
trả về giá trị giữa0
và23
. Nếu giờ nằm ngoài phạm vi này,EXTRACT()
sẽ lặp qua0
và23
bao nhiêu lần nếu cần để trả về giá trị giữa0
và23
.
Ví dụ
Đây là một ví dụ để chứng minh.
SELECT
HOUR('24:00:00'),
EXTRACT(HOUR FROM '24:00:00');
Kết quả:
+------------------+-------------------------------+ | HOUR('24:00:00') | EXTRACT(HOUR FROM '24:00:00') | +------------------+-------------------------------+ | 24 | 0 | +------------------+-------------------------------+
HOUR()
hàm trả về giờ thực tế đã được cung cấp, trong khi EXTRACT()
trả về 0
. Điều này là do 24
cao hơn 23
, là giá trị cao nhất EXTRACT()
sẽ trở lại cho phần giờ. Trong trường hợp này, EXTRACT()
bắt đầu đếm lại, bắt đầu từ 0
.
Nó sẽ tiếp tục làm điều này nhiều lần nếu cần, để kết quả luôn nằm trong khoảng 0
và 23
.
Đây là một ví dụ khác có phần giờ lớn hơn nhiều:
SELECT
HOUR('742:00:00'),
EXTRACT(HOUR FROM '742:00:00');
Kết quả:
+-------------------+--------------------------------+ | HOUR('742:00:00') | EXTRACT(HOUR FROM '742:00:00') | +-------------------+--------------------------------+ | 742 | 22 | +-------------------+--------------------------------+