MySQL如何获取当前时间并进行时间格式转换

来源:个人站长网作者:椎名光头衔:网络博主
导读:本期聚焦于小伙伴创作的《MySQL如何获取当前时间并进行时间格式转换》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《MySQL如何获取当前时间并进行时间格式转换》有用,将其分享出去将是对创作者最好的鼓励。

在MySQL的日常开发和数据处理中,时间的获取与格式转换是非常高频的操作,无论是记录数据创建时间、统计时间范围内的数据,还是对接不同系统的时间格式要求,都需要用到相关的时间处理函数。掌握这些函数的用法,能让时间相关的开发工作更加高效。

MySQL如何获取当前时间并进行时间格式转换

一、MySQL获取时间的常用方法

1. 获取当前完整时间

最常用的获取当前时间的函数是NOW(),它会返回当前的日期和时间,格式为YYYY-MM-DD HH:MM:SS,返回值的类型取决于使用的上下文,在字符串上下文返回字符串,在日期上下文返回DATETIME类型。

-- 获取当前完整时间
SELECT NOW();
-- 示例返回结果:2024-05-20 14:30:25

另一个类似的函数是CURRENT_TIMESTAMP(),它的功能和NOW()完全一致,可以互相替换使用。

SELECT CURRENT_TIMESTAMP();
-- 返回结果和NOW()一致

2. 获取当前日期或当前时间

如果只需要获取当前的日期部分,可以使用CURDATE()或者CURRENT_DATE(),返回格式为YYYY-MM-DD

-- 获取当前日期
SELECT CURDATE();
-- 示例返回结果:2024-05-20

SELECT CURRENT_DATE();
-- 返回结果和CURDATE()一致

如果只需要获取当前的时间部分,可以使用CURTIME()或者CURRENT_TIME(),返回格式为HH:MM:SS

-- 获取当前时间
SELECT CURTIME();
-- 示例返回结果:14:30:25

SELECT CURRENT_TIME();
-- 返回结果和CURTIME()一致

3. 获取Unix时间戳

Unix时间戳是从1970年1月1日00:00:00 UTC到当前时间的总秒数,MySQL中可以使用UNIX_TIMESTAMP()函数获取当前时间的Unix时间戳,如果不传参数则返回当前时间的时间戳,传入日期参数则返回对应日期的时间戳。

-- 获取当前Unix时间戳
SELECT UNIX_TIMESTAMP();
-- 示例返回结果:1716189025

-- 获取指定日期的Unix时间戳
SELECT UNIX_TIMESTAMP('2024-05-20 14:30:25');
-- 返回结果:1716189025

二、MySQL时间格式转换方法

1. 使用DATE_FORMAT函数格式化日期

DATE_FORMAT(date, format)是MySQL中最常用的时间格式化函数,第一个参数是要格式化的日期值,第二个参数是格式字符串,通过不同的格式符可以输出任意需要的时间格式。

常用的格式符说明如下:

格式符说明示例
%Y四位年份2024
%y两位年份24
%m两位月份(01-12)05
%c月份(1-12)5
%d两位日期(01-31)20
%H24小时制小时(00-23)14
%h12小时制小时(01-12)02
%i分钟(00-59)30
%s秒(00-59)25
%W星期全称Monday
%w星期索引(0=周日,6=周六)1

下面是一些常用的格式化示例:

-- 格式化为YYYY年MM月DD日 HH时MM分SS秒
SELECT DATE_FORMAT(NOW(), '%Y年%m月%d日 %H时%i分%s秒');
-- 示例返回结果:2024年05月20日 14时30分25秒

-- 格式化为MM/DD/YYYY
SELECT DATE_FORMAT(NOW(), '%m/%d/%Y');
-- 示例返回结果:05/20/2024

-- 只获取年份和月份
SELECT DATE_FORMAT(NOW(), '%Y-%m');
-- 示例返回结果:2024-05

2. Unix时间戳和日期的相互转换

前面提到UNIX_TIMESTAMP()可以将日期转换为Unix时间戳,反过来可以使用FROM_UNIXTIME(unix_timestamp, format)函数将Unix时间戳转换为日期,第二个参数可选,用于指定输出格式,不指定的话默认返回YYYY-MM-DD HH:MM:SS格式。

-- 将Unix时间戳转换为默认格式的日期
SELECT FROM_UNIXTIME(1716189025);
-- 示例返回结果:2024-05-20 14:30:25

-- 将Unix时间戳转换为指定格式的日期
SELECT FROM_UNIXTIME(1716189025, '%Y年%m月%d日');
-- 示例返回结果:2024年05月20日

3. 字符串和时间类型的相互转换

如果拿到的是字符串格式的时间,需要转换为MySQL的日期类型,可以使用STR_TO_DATE(str, format)函数,格式符和DATE_FORMAT中的一致。

-- 将字符串转换为日期类型
SELECT STR_TO_DATE('2024年05月20日', '%Y年%m月%d日');
-- 示例返回结果:2024-05-20

-- 将字符串转换为日期时间类型
SELECT STR_TO_DATE('2024-05-20 14:30:25', '%Y-%m-%d %H:%i:%s');
-- 示例返回结果:2024-05-20 14:30:25

如果要将日期类型转换为字符串,除了用DATE_FORMAT,也可以直接使用CAST函数做类型转换,不过CAST转换的格式是固定的,灵活性不如DATE_FORMAT

-- 使用CAST将日期转换为字符串
SELECT CAST(NOW() AS CHAR);
-- 示例返回结果:2024-05-20 14:30:25

三、实际开发中的常见场景示例

1. 查询当天的数据

很多业务场景需要查询当天新增的数据,通常表中会有create_time这样的DATETIME类型字段,我们可以通过格式转换来实现查询。

-- 查询当天创建的数据
SELECT * FROM order_table 
WHERE DATE_FORMAT(create_time, '%Y-%m-%d') = CURDATE();

2. 统计近7天的数据量

统计近7天的数据量时,可以通过日期计算来获取起始时间。

-- 统计近7天每天的数据量
SELECT 
    DATE_FORMAT(create_time, '%Y-%m-%d') AS day,
    COUNT(*) AS count
FROM order_table
WHERE create_time >= DATE_SUB(CURDATE(), INTERVAL 6 DAY)
GROUP BY day;

3. 时间字段的默认值设置

在建表的时候,如果需要记录数据的创建时间和更新时间,可以设置默认值自动获取当前时间。

-- 创建测试表
CREATE TABLE test_time (
    id INT PRIMARY KEY AUTO_INCREMENT,
    content VARCHAR(255),
    create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
    update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

-- 插入数据时不指定时间字段,会自动填充当前时间
INSERT INTO test_time (content) VALUES ('测试内容');
SELECT * FROM test_time;
-- 可以看到create_time和update_time都自动填充了当前时间

四、注意事项

  • 时间函数的返回值类型需要注意,比如NOW()在作为字符串比较和作为日期比较时可能有不同的表现,建议做时间范围查询时尽量使用日期类型的比较,避免字符串转换带来的性能问题。
  • 使用STR_TO_DATE转换字符串时,格式符必须和字符串的格式完全匹配,否则会返回NULL。
  • Unix时间戳的范围是1970-01-01 00:00:00到2038-01-19 03:14:07,超出这个范围的时间无法用32位Unix时间戳表示,需要注意业务中的时间范围是否合理。
  • 不同的MySQL版本对时间函数的支持可能有细微差异,使用前建议确认当前使用的版本对应的函数文档。

MySQL时间获取时间格式转换DATE_FORMATUNIX_TIMESTAMP修改时间:2026-06-13 14:06:22

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。