mysql中日期与时间函数的应用与格式化
发布时间 - 2026-02-02 00:00:00 点击率:次应使用 FROM_UNIXTIME() 将时间戳转为可读日期,如 FROM_UNIXTIME(1717023600) 返回 '2025-05-30 15:00:00',支持自定义格式;STR_TO_DATE() 仅适用于字符串转日期,不接受整数时间戳。
MySQL 里怎么把时间戳转成可读日期?用 FROM_UNIXTIME() 而不是 STR_TO_DATE()
很多新手看到时间戳(比如 1717023600)第一反应是用 STR_TO_DATE(),但这个函数只处理字符串,不认整数时间戳。真正该用的是 FROM_UNIXTIME()。
-
FROM_UNIXTIME(1717023600)→'2025-05-30 15:00:00'(默认格式) - 加第二个参数可自定义格式:
FROM_UNIXTIME(1717023600, '%Y年%m月%d日 %H点%i')→'2025年05月30日 15点00' - 注意:如果字段是
BIGINT类型存的 Unix 时间戳,直接传入即可;如果是字符串(如'1717023600'),MySQL 会自动隐式转换,但不建议依赖这点 - 时区影响大:该函数按 MySQL 当前会话时区输出,
SELECT @@time_zone查看当前设置,必要时先执行SET time_zone = '+8:00'
想从日期字段里单独取年份或小时?别用字符串截取,用 YEAR()、HOUR() 等专用函数
有人用 SUBSTR(created_at, 1, 4) 提年份,看似能用,但一遇到 DATE 或 DATETIME 字段类型就出错——SUBSTR 是字符串函数,对日期类型会触发隐式转换,结果不可靠且慢。
- 正确做法:
YEAR(created_at)、MONTH(created_at)、DAY(created_at)、HOUR(updated_at)、MINUTE(updated_at) - 这些函数返回整数,可用于
GROUP BY或条件筛选,比如:SELECT YEAR(order_time) AS y, COUNT(*) FROM orders GROUP BY y;
-
WEEKDAY()和DAYOFWEEK()返回值不同:前者周一是 0,后者周日是 1,写报表时容易搞反,建议注释说明 - 对
NULL值安全:所有这类函数遇到NULL都返回NULL,不会报错,但要注意后续逻辑是否容错
DATE_FORMAT() 格式化输出时,为什么有些格式符不生效?检查字段类型和 SQL 模式
DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s') 没问题,但换成 DATE_FORMAT('2025-05-30', '%W %M %e, %Y') 却返回 NULL,常见原因是输入不是合法日期类型。
- 输入必须是
DATE、DATETIME或能被 MySQL 自动识别为日期的字符串(如'2025-05-30'),像'30/05/2025'这种格式会失败 - 如果字段是
VARCHAR存的日期,先用STR_TO_DATE(col, '%d/%m/%Y')转成日期,再套DATE_FORMAT() - 严格模式下(
sql_mode含STRICT_TRANS_TABLES),非法日期如'2025-02-30'会导致整个表达式为NULL,而不是静默转成'2025-03-01' - 中文星期/月份需要系统字符集支持:确保客户端连接字符集是
utf8mb4,且 MySQL 的lc_time_names设为'zh_CN',否则%W显示英文
计算两个时间差用 TIMESTAMPDIFF(),别手算秒数除法
用 (UNIX_TIMESTAMP(end) - UNIX_TIMESTAMP(start)) / 3600 算小时数,看着简单,但跨夏令时、闰秒、时区切换时结果错得离谱。
-
TIMESTAMPDIFF(HOUR, start_time, end_time)自动处理时区和日历逻辑,推荐用于业务统计 - 单位支持:
SECOND、MINUTE、HOUR、DAY、WEEK、MONTH、QUARTER、YEAR - 注意顺序:
TIMESTAMPDIFF是「后减前」,即TIMESTAMPDIFF(DAY, '2025-01-01', '2025-01-05')返回4,不是5 - 性能友好:比嵌套
UNIX_TIMESTAMP()快,尤其在大表WHERE条件中使用时,能走索引(如果字段有索引)
MySQL 的日期函数看着简单,实际踩坑多在类型隐式转换、时区配置、SQL 模式和输入格式这四点上。写完记得用真实数据测一遍 NULL、边界日期

# mysql
# unix
# 格式化输出
# 隐式转换
# 为什么
# sql
# NULL
# select
# date
# 字符串
# 严格模式
# 看着
# 转成
# 自定义
# 隐式
# 的是
# 客户端
# 而不是
# 一是
# 且慢
# 设为
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】
微信小程序 canvas开发实例及注意事项
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤
Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理
html5如何实现懒加载图片_ intersectionobserver api用法【教程】
Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析
瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口
如何用AI帮你把自己的生活经历写成一个有趣的故事?
Laravel API资源类怎么用_Laravel API Resource数据转换
Laravel怎么导出Excel文件_Laravel Excel插件使用教程
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
如何在 Pandas 中基于一列条件计算另一列的分组均值
如何在不使用负向后查找的情况下匹配特定条件前的换行符
微信公众帐号开发教程之图文消息全攻略
JavaScript模板引擎Template.js使用详解
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
韩国服务器如何优化跨境访问实现高效连接?
JS弹性运动实现方法分析
公司门户网站制作流程,华为官网怎么做?
高防服务器如何保障网站安全无虞?
详解Huffman编码算法之Java实现
Linux系统运维自动化项目教程_Ansible批量管理实战
原生JS获取元素集合的子元素宽度实例
Laravel如何实现用户注册和登录?(Auth脚手架指南)
Laravel Fortify是什么,和Jetstream有什么关系
5种Android数据存储方式汇总
WEB开发之注册页面验证码倒计时代码的实现
JavaScript Ajax实现异步通信
php静态变量怎么调试_php静态变量作用域调试技巧【解答】
Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】
如何正确选择百度移动适配建站域名?
php增删改查怎么学_零基础入门php数据库操作必知基础【教程】
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
佛山企业网站制作公司有哪些,沟通100网上服务官网?
微信小程序 五星评分(包括半颗星评分)实例代码
如何快速搭建高效WAP手机网站?
高端网站建设与定制开发一站式解决方案 中企动力
太平洋网站制作公司,网络用语太平洋是什么意思?
如何快速生成凡客建站的专业级图册?
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
如何用美橙互联一键搭建多站合一网站?
Laravel如何使用Vite进行前端资源打包?(配置示例)
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】
Swift中swift中的switch 语句
Linux安全能力提升路径_长期防护思维说明【指导】
如何快速搭建二级域名独立网站?
猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?

