当前位置:首页 > 问答 > 正文

数据库|时间函数|mysql获取当前时间及常用时间函数汇总

MySQL时间函数大全:轻松获取当前时间及常用时间操作技巧

最新动态:MySQL 8.4版本时间函数性能提升显著

根据2025年7月的最新测试数据显示,MySQL 8.4版本在时间函数处理效率上较前代提升了约30%,特别是在处理大量时间数据转换和计算时表现更为出色,这对于需要频繁操作时间数据的应用来说是个好消息。

获取当前时间的基本方法

在MySQL中获取当前时间是最基础也是最常用的操作,根据不同的精度需求,我们有多种选择:

-- 获取当前日期和时间(YYYY-MM-DD HH:MM:SS格式)
SELECT NOW();
-- 获取当前日期(YYYY-MM-DD格式)
SELECT CURDATE();
-- 获取当前时间(HH:MM:SS格式)
SELECT CURTIME();
-- 获取当前时间戳(从1970-01-01至今的秒数)
SELECT UNIX_TIMESTAMP();

这几个函数在实际工作中使用频率极高,比如记录操作日志时我们常用NOW()来标记操作时间。

时间格式化函数

从数据库取出的时间数据往往需要特定格式展示,这时就需要用到格式化函数:

数据库|时间函数|mysql获取当前时间及常用时间函数汇总

-- 将日期时间格式化为指定样式
SELECT DATE_FORMAT(NOW(), '%Y年%m月%d日 %H时%i分%s秒');
-- 常用格式符号说明:
-- %Y 四位年份
-- %y 两位年份
-- %m 月份(01-12)
-- %d 日(01-31)
-- %H 24小时制小时
-- %h 12小时制小时
-- %i 分钟
-- %s 秒
-- %W 星期名称

举个例子,如果想把订单时间显示为"2025年07月15日 14:30",可以这样写:

SELECT DATE_FORMAT(order_time, '%Y年%m月%d日 %H:%i') FROM orders;

时间计算函数

MySQL提供了丰富的时间计算功能,可以轻松实现日期的加减:

-- 增加时间间隔
SELECT DATE_ADD(NOW(), INTERVAL 1 DAY);  -- 加1天
SELECT DATE_ADD(NOW(), INTERVAL 3 HOUR); -- 加3小时
SELECT DATE_ADD(NOW(), INTERVAL -2 MONTH); -- 减2个月
-- 同样功能的简化写法
SELECT NOW() + INTERVAL 1 WEEK;
-- 计算两个日期之间的差值
SELECT DATEDIFF('2025-07-20', '2025-07-15'); -- 返回天数差5
SELECT TIMESTAMPDIFF(HOUR, '2025-07-15 08:00', '2025-07-15 18:00'); -- 返回小时差10

时间提取函数

有时候我们需要从完整时间戳中提取特定部分:

-- 提取年份
SELECT YEAR(NOW());
-- 提取月份
SELECT MONTH(NOW());
SELECT MONTHNAME(NOW()); -- 返回英文月份名
-- 提取日
SELECT DAY(NOW());
SELECT DAYNAME(NOW()); -- 返回星期几的英文名
-- 提取时间部分
SELECT TIME(NOW());
-- 提取小时、分钟、秒
SELECT HOUR(NOW());
SELECT MINUTE(NOW());
SELECT SECOND(NOW());

实用时间函数组合技巧

掌握了基础函数后,我们可以组合使用解决实际问题:

数据库|时间函数|mysql获取当前时间及常用时间函数汇总

  1. 计算本月第一天和最后一天
    -- 本月第一天
    SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL DAY(CURDATE())-1 DAY), '%Y-%m-%d');

-- 本月最后一天 SELECT LAST_DAY(CURDATE());


2. **计算年龄**
```sql
SELECT TIMESTAMPDIFF(YEAR, '1990-05-20', CURDATE()) AS age;
  1. 工作日计算(排除周末)
    -- 计算5个工作日后的日期
    SET @days = 5;
    SET @date = CURDATE();
    WHILE @days > 0 DO
     SET @date = DATE_ADD(@date, INTERVAL 1 DAY);
     IF DAYOFWEEK(@date) NOT IN (1,7) THEN
         SET @days = @days - 1;
     END IF;
    END WHILE;
    SELECT @date;

时区处理函数

在全球化应用中,时区处理尤为重要:

-- 转换时区
SELECT CONVERT_TZ('2025-07-15 12:00:00','+00:00','+08:00');
-- 查看服务器时区设置
SELECT @@global.time_zone, @@session.time_zone;

性能优化小贴士

  1. 在频繁查询的日期字段上建立索引可以显著提高查询速度
  2. 避免在WHERE条件中对日期字段使用函数转换,这会导致索引失效
  3. 对于固定格式的日期查询,使用BETWEEN比多个OR条件效率更高

MySQL的时间函数库非常丰富,掌握这些函数能让你在开发中游刃有余地处理各种时间相关的需求,从简单的获取当前时间到复杂的日期计算,合理运用这些函数可以大大减少应用程序层的处理逻辑,建议收藏本文作为参考手册,遇到时间处理问题时随时查阅。

发表评论