当前位置: 首页 > news >正文

mysql里面函数 unix_timestamp()的作用是什么,举例说明

mysql里面函数 unix_timestamp()的作用是什么,举例说明

UNIX_TIMESTAMP() 是 MySQL 中用于将日期时间值转换为 Unix 时间戳的函数。
Unix 时间戳是指从 1970-01-01 00:00:00 UTC 开始经过的秒数(对于 MySQL 的 DATETIME 范围,通常有效)。

注意:这个函数并非 MySQL 绝对“专属”(其他数据库如 PostgreSQL 有 EXTRACT(EPOCH FROM ...)),但在 MySQL 中非常常用且语法简洁。


主要用法

1. 无参数:返回当前时间的 Unix 时间戳

SELECT UNIX_TIMESTAMP();

示例结果(假设当前时间为 2026-05-09 12:34:56):

UNIX_TIMESTAMP()
1778373296

相当于 SELECT UNIX_TIMESTAMP(NOW());


2. 带一个日期时间参数:将指定时间转换为时间戳

参数可以是 DATEDATETIMETIMESTAMP 类型,或符合格式的字符串。

SELECT UNIX_TIMESTAMP('2026-05-09 00:00:00');

结果(取决于时区,MySQL 默认以服务器时区解析):

UNIX_TIMESTAMP('2026-05-09 00:00:00')
1778342400

如果只给日期 '2026-05-09',MySQL 会自动补充时间为 00:00:00


3. 结合列使用:将表中的日期字段转为时间戳

-- 假设有订单表 orders,包含 created_at (DATETIME)
SELECT order_id,created_at,UNIX_TIMESTAMP(created_at) AS created_ts
FROM orders;
order_id created_at created_ts
1 2026-05-09 08:30:00 1778365800
2 2026-05-08 15:45:00 1778283900

注意事项

  1. 时区问题
    UNIX_TIMESTAMP() 在转换时假设输入的时间是当前会话的时区,然后将其转为 UTC 时间戳。
    如果服务器时区与数据实际时区不一致,结果会偏移。

  2. 无效日期返回 NULL
    如果参数不是合法的日期时间(如 '2026-02-30'),则返回 NULL

  3. 范围限制
    MySQL 的 Unix 时间戳支持的范围大致是 '1970-01-01 00:00:01''2038-01-19 03:14:07'(32 位系统上限)。但 MySQL 5.6+ 使用内部 64 位存储,实际可支持更远,但函数仍受底层 C 库的 time_t 限制。

  4. 互为逆运算
    FROM_UNIXTIME(unix_timestamp) 可将时间戳转回日期时间字符串。

    SELECT FROM_UNIXTIME(1778342400);  -- 返回 '2026-05-09 00:00:00'
    

完整示例

假设我们要查询最近 7 天的订单(基于时间戳比较):

SELECT * FROM orders
WHERE UNIX_TIMESTAMP(created_at) > UNIX_TIMESTAMP() - 7*24*3600;

更好的写法是直接比较日期,但时间戳常用于跨系统传递或计算差值。


总结

调用方式 作用
UNIX_TIMESTAMP() 当前时间的 Unix 时间戳(秒)
UNIX_TIMESTAMP(datetime_value) 将给定的日期时间转为 Unix 时间戳

简单记忆:把人类可读的时间“拍扁”成一个整数秒数,便于存储或计算。