Trong MariaDB, UNIX_TIMESTAMP()
là một hàm ngày và giờ được tích hợp sẵn trả về dấu thời gian Unix, dựa trên đối số của nó (hoặc thiếu đối số).
Nó hoạt động như thế này:
- Khi được gọi là không có một đối số, nó trả về một dấu thời gian Unix (giây kể từ '1970-01-01 00:00:00' UTC) dưới dạng một số nguyên không dấu.
- Khi được gọi là với một đối số, nó trả về giá trị của đối số dưới dạng giây kể từ '1970-01-01 00:00:00' UTC.
Hàm nghịch đảo của UNIX_TIMESTAMP()
là FROM_UNIXTIME()
.
Cú pháp
UNIX_TIMESTAMP()
có thể được gọi theo hai cách sau:
UNIX_TIMESTAMP()
UNIX_TIMESTAMP(date)
Nơi date
là một chuỗi ngày tháng, một chuỗi ngày giờ, một dấu thời gian hoặc một số ở định dạng YYMMDD
hoặc YYYYMMDD
.
Ví dụ - Không có Đối số
Đây là ví dụ về cách gọi UNIX_TIMESTAMP()
không có đối số:
SELECT UNIX_TIMESTAMP();
Kết quả:
+------------------+ | UNIX_TIMESTAMP() | +------------------+ | 1622502492 | +------------------+
Điều này cho chúng tôi biết rằng khi tôi chạy câu lệnh đó, 1622502492 giây đã trôi qua kể từ 1970-01-01 00:00:00.
Ví dụ - Với một đối số
Dưới đây là một ví dụ với một đối số:
SELECT UNIX_TIMESTAMP('1970-01-02');
Kết quả:
+------------------------------+ | UNIX_TIMESTAMP('1970-01-02') | +------------------------------+ | 50400 | +------------------------------+
Trong ví dụ sau, tôi gọi UNIX_TIMESTAMP()
hai lần; một lần không đối số và một lần với NOW()
như đối số.
SELECT
UNIX_TIMESTAMP(),
UNIX_TIMESTAMP(NOW());
Kết quả:
+------------------+-----------------------+ | UNIX_TIMESTAMP() | UNIX_TIMESTAMP(NOW()) | +------------------+-----------------------+ | 1622502678 | 1622502678 | +------------------+-----------------------+
Chuỗi ngày giờ
Trong ví dụ trên, NOW()
trả về giá trị ngày giờ.
Trong ví dụ này, tôi cung cấp một cách rõ ràng chuỗi ngày giờ:
SELECT UNIX_TIMESTAMP('2020-10-30 10:23:47');
Kết quả:
+---------------------------------------+ | UNIX_TIMESTAMP('2020-10-30 10:23:47') | +---------------------------------------+ | 1604017427 | +---------------------------------------+
Micro giây
UNIX_TIMESTAMP()
hỗ trợ micro giây:
SELECT UNIX_TIMESTAMP('2020-10-30 10:23:47.123456');
Kết quả:
+----------------------------------------------+ | UNIX_TIMESTAMP('2020-10-30 10:23:47.123456') | +----------------------------------------------+ | 1604017427.123456 | +----------------------------------------------+
Số ngày
Số ngày tháng được hỗ trợ:
SELECT UNIX_TIMESTAMP(20201030);
Kết quả:
+--------------------------+ | UNIX_TIMESTAMP(20201030) | +--------------------------+ | 1603980000 | +--------------------------+
Đối số không hợp lệ
Khi được truyền bất kỳ đối số không hợp lệ nào, UNIX_TIMESTAMP()
trả về null
với một cảnh báo:
SELECT UNIX_TIMESTAMP('Homer');
Kết quả:
+-------------------------+ | UNIX_TIMESTAMP('Homer') | +-------------------------+ | NULL | +-------------------------+ 1 row in set, 1 warning (0.001 sec)
Kiểm tra cảnh báo:
SHOW WARNINGS;
Kết quả:
+---------+------+-------------------------------+ | Level | Code | Message | +---------+------+-------------------------------+ | Warning | 1292 | Incorrect time value: 'Homer' | +---------+------+-------------------------------+
Quá nhiều đối số
Gọi UNIX_TIMESTAMP()
với quá nhiều đối số dẫn đến lỗi:
SELECT UNIX_TIMESTAMP('1970-01-02', '1970-01-03');
Kết quả:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'UNIX_TIMESTAMP'