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) 提年份,看似能用,但一遇到 DATEDATETIME 字段类型就出错——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,常见原因是输入不是合法日期类型。

  • 输入必须是 DATEDATETIME 或能被 MySQL 自动识别为日期的字符串(如 '2025-05-30'),像 '30/05/2025' 这种格式会失败
  • 如果字段是 VARCHAR 存的日期,先用 STR_TO_DATE(col, '%d/%m/%Y') 转成日期,再套 DATE_FORMAT()
  • 严格模式下(sql_modeSTRICT_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) 自动处理时区和日历逻辑,推荐用于业务统计
  • 单位支持:SECONDMINUTEHOURDAYWEEKMONTHQUARTERYEAR
  • 注意顺序:TIMESTAMPDIFF 是「后减前」,即 TIMESTAMPDIFF(DAY, '2025-01-01', '2025-01-05') 返回 4,不是 5
  • 性能友好:比嵌套 UNIX_TIMESTAMP() 快,尤其在大表 WHERE 条件中使用时,能走索引(如果字段有索引)

MySQL 的日期函数看着简单,实际踩坑多在类型隐式转换、时区配置、SQL 模式和输入格式这四点上。写完记得用真实数据测一遍 NULL、边界日期

(如 2025-02-29)、不同时区客户端,不然上线后才发现显示乱码或统计偏差,就得翻日志查半天。


# 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调试工具使用【前端必备】  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?