MariaDB
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> MariaDB

Cách CONVERT_TZ () hoạt động trong MariaDB

Trong MariaDB, CONVERT_TZ() là một hàm ngày và giờ được tích hợp sẵn để chuyển đổi giá trị ngày giờ từ múi giờ này sang múi giờ khác.

Khi bạn gọi hàm, bạn chuyển ba đối số:thời gian, múi giờ để chuyển đổi từ và múi giờ để chuyển đổi thành .

Cú pháp

Cú pháp như sau:

CONVERT_TZ(dt,from_tz,to_tz)

Ở đâu dt là biểu thức ngày giờ, from_tz là múi giờ để chuyển đổi từ to_tz là múi giờ để chuyển đổi thành .

Ví dụ

Đây là một ví dụ:

SELECT CONVERT_TZ('2021-05-10 01:00:00', '+00:00', '+10:00');

Kết quả:

+-------------------------------------------------------+
| CONVERT_TZ('2021-05-10 01:00:00', '+00:00', '+10:00') |
+-------------------------------------------------------+
| 2021-05-10 11:00:00                                   |
+-------------------------------------------------------+

Ở đây, múi giờ ban đầu là +00:00 và chúng tôi đã chuyển đổi nó thành +10:00.

Dưới đây là những gì sẽ xảy ra nếu chúng tôi sử dụng múi giờ xuất phát khác:

SELECT CONVERT_TZ('2021-05-10 01:00:00', '+03:00', '+10:00');

Kết quả:

+-------------------------------------------------------+
| CONVERT_TZ('2021-05-10 01:00:00', '+03:00', '+10:00') |
+-------------------------------------------------------+
| 2021-05-10 08:00:00                                   |
+-------------------------------------------------------+

Múi giờ được đặt tên

Các múi giờ đã đặt tên có thể được sử dụng, nhưng điều này yêu cầu phải tải các bảng múi giờ khác nhau.

Đây là điều xảy ra khi bảng múi giờ không được điền:

SELECT 
CONVERT_TZ('2021-05-10 01:00:00', 'GMT', 'Pacific/Chatham');

Kết quả:

+-------------------------------------------------------------+
| CONVERT_TZ('2021-05-10 01:00:00', 'GMT', 'Pacific/Chatham') |
+-------------------------------------------------------------+
| NULL                                                        |
+-------------------------------------------------------------+

Kết quả là null , bởi vì không có dữ liệu múi giờ trong bảng múi giờ.

Sau đây là cùng một truy vấn, nhưng lần này với dữ liệu trong các bảng múi giờ:

SELECT 
CONVERT_TZ('2021-05-10 01:00:00', 'GMT', 'Pacific/Chatham');

Kết quả:

+-------------------------------------------------------------+
| CONVERT_TZ('2021-05-10 01:00:00', 'GMT', 'Pacific/Chatham') |
+-------------------------------------------------------------+
| 2021-05-10 13:45:00                                         |
+-------------------------------------------------------------+

Giá trị ngày giờ nằm ​​ngoài phạm vi

Sẽ không có chuyển đổi nào nếu giá trị nằm ngoài TIMESTAMP được hỗ trợ phạm vi ('1970-01-01 00:00:01' tới '2038-01-19 05:14:07' UTC) khi được chuyển đổi từ from_tz sang UTC.

Ví dụ:

SELECT CONVERT_TZ('2040-05-10 01:00:00', '+00:00', '+10:00');

Kết quả:

+-------------------------------------------------------+
| CONVERT_TZ('2040-05-10 01:00:00', '+00:00', '+10:00') |
+-------------------------------------------------------+
| 2040-05-10 01:00:00                                   |
+-------------------------------------------------------+

Đối số không hợp lệ

Nếu bất kỳ đối số nào không hợp lệ, CONVERT_TZ() trả về null .

Ví dụ:

SELECT CONVERT_TZ('2040-05-10 01:00:00', '+00:00', '+90:00');

Kết quả:

+-------------------------------------------------------+
| CONVERT_TZ('2040-05-10 01:00:00', '+00:00', '+90:00') |
+-------------------------------------------------------+
| NULL                                                  |
+-------------------------------------------------------+

Trong trường hợp này, tôi đã cố chuyển đổi biểu thức datetime thành múi giờ không hợp lệ (+90:00 ), và như vậy null đã được trả lại.

Đối số rỗng

Nếu bất kỳ đối số nào là null , kết quả là null :

SELECT 
    CONVERT_TZ(null, '+00:00', '+90:00') AS "1",
    CONVERT_TZ('2021-05-10 01:00:00', null, '+90:00') AS "2",
    CONVERT_TZ('2021-05-10 01:00:00', '+00:00', null) AS "3";

Kết quả:

+------+------+------+
| 1    | 2    | 3    |
+------+------+------+
| NULL | NULL | NULL |
+------+------+------+

Thiếu đối số

Đang gọi CONVERT_TZ() với số lượng đối số sai hoặc không chuyển bất kỳ đối số nào dẫn đến lỗi:

SELECT CONVERT_TZ();

Kết quả:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'CONVERT_TZ'

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách thực thi và quản lý bản sao lưu MySQL cho Oracle DBA’s

  2. Mã hóa MariaDB đầy đủ lúc nghỉ và đang chuyển để bảo vệ dữ liệu tối đa - Phần thứ hai

  3. Cách UUID_SHORT () hoạt động trong MariaDB

  4. MariaDB JSON_LOOSE () Giải thích

  5. Cách chạy ứng dụng PHP 5 với MySQL 8.0 trên CentOS 7