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

MySQL的DATE_FORMAT函数介绍

函数概述

DATE_FORMAT是MySQL中用于日期时间格式化的核心函数,支持将日期/时间值按指定格式转换为字符串。其语法为:

DATE_FORMAT(date, format)

其中date可为日期时间字段或常量,format为包含格式占位符的字符串。

语法详解

常用格式占位符

占位符含义示例值
%Y四位数年份2025
%y两位数年份25
%M英文月份全称November
%m两位数月份11
%d两位数日期06
%D带后缀的日期6th
%W英文星期名称Wednesday
%H24小时制小时14
%h12小时制小时02
%i分钟30
%s45
%pAM/PM标识PM
%T完整时间格式14:30:45

特殊格式示例

-- 中文日期格式
SELECT DATE_FORMAT(NOW(), '%Y年%m月%d日');20251106-- 友好时间显示
SELECT DATE_FORMAT(NOW(), '%W, %M %d, %Y %h:%i %p'); → Wednesday, November 06, 2025 02:30 PM-- 季度表示
SELECT DATE_FORMAT(NOW(), 'Q%q-%Y'); → Q4-2025

实用示例

基础格式化

-- 订单日期标准化
SELECT id, DATE_FORMAT(created_at, '%Y-%m-%d') AS order_date FROM orders;-- 动态条件格式化
SELECT id, CASE WHEN created_at >= CURDATE() THEN DATE_FORMAT(created_at, '今日 %H:%i')ELSE DATE_FORMAT(created_at, '%m-%d') END AS display_time 
FROM orders;

统计分析场景

-- 按月统计订单量
SELECT DATE_FORMAT(created_at, '%Y-%m') AS month, COUNT(*) 
FROM orders 
GROUP BY month;-- 按周统计用户活跃度
SELECT DATE_FORMAT(login_time, '%x-%v') AS week, COUNT(DISTINCT user_id) 
FROM user_logs 
GROUP BY week;

性能优化建议

  1. 索引优化:避免在WHERE子句中使用DATE_FORMAT,改用范围查询
-- 错误示例(索引失效)
SELECT * FROM orders 
WHERE DATE_FORMAT(created_at, '%Y-%m') = '2025-11';-- 正确示例(使用索引)
SELECT * FROM orders 
WHERE created_at BETWEEN '2025-11-01 00:00:00' AND '2025-11-30 23:59:59';
  1. 存储优化:对高频格式化字段可添加生成列
ALTER TABLE orders 
ADD COLUMN create_date_str VARCHAR(10) 
GENERATED ALWAYS AS (DATE_FORMAT(created_at, '%Y-%m-%d')) STORED;

常见问题处理

时区问题

确保MySQL服务器时区与业务需求一致:

-- 查看当前时区设置
SHOW VARIABLES LIKE '%time_zone%';-- 转换时区格式化
SELECT DATE_FORMAT(CONVERT_TZ(create_time, '+00:00', '+08:00'), '%Y-%m-%d');

特殊格式处理

-- 处理含中文分隔符的日期
SELECT DATE_FORMAT(STR_TO_DATE('2025/11/06', '%Y/%m/%d'), '%Y年%m月%d日');-- 空值处理
SELECT COALESCE(DATE_FORMAT(NULL, '%Y-%m-%d'), '暂无数据');

最佳实践

  1. 多语言支持:通过lc_time_names设置月份/星期显示语言
SET lc_time_names = 'zh_CN';
SELECT DATE_FORMAT(NOW(), '%M'); → 十一月
  1. 数据兼容:注意不同数据库格式化函数的差异,如Oracle的TO_CHAR函数

  2. 参数化查询:避免SQL注入,使用预编译语句

# Python示例(mysql-connector)
cursor.execute("SELECT DATE_FORMAT(%s, '%%Y-%%m-%%d')", (datetime_value,))

通过灵活运用DATE_FORMAT函数,可以实现从基础的日期显示到复杂的数据分析场景的全面支持,是MySQL日期处理中不可或缺的工具。

http://www.dtcms.com/a/578035.html

相关文章:

  • 涞水县建设局网站电子商务网站建设哪本教材比较适合中等专业学校用
  • 建阳网站建设wordpress手机验证码注册
  • C4D服装建模实战:纽扣、嵌条与拉链工具使用详解
  • Shell高手必备:30字搞定XML注释过滤
  • 律师网站建设哪家好软文范文
  • C++编译期间验证单个对象可以被释放、验证数组可以被释放和验证函数对象能否被指定类型参数调用
  • 机器学习训练过程中的回调函数BaseCallback
  • Cordys CRM正式开源,AI驱动客户关系管理加速演进
  • 河北省 建设执业注册中心网站长沙 汽车 网站建设
  • 手机如何定位:从时间差到地图上的“小蓝点”
  • Rust : Send、Sync与现实世界的映射
  • PHP推荐权重算法以及分页
  • 做软件赚钱的网站有哪些淘宝客seo推广教程
  • 企业网站制作建设建设通app官方下载
  • 【FAQ】HarmonyOS SDK 闭源开放能力 — Form Kit
  • 学习:JavaScript(8)
  • Docker的host网络模式
  • HORIBA 新型便携式废气测量系统技术解析
  • 建设自有网站需要什么杭州网站建设设计公司哪家好
  • 常州网站建设方案维护小皮搭建本地网站
  • 静态路由-等价路由、浮动路由配置
  • 37-38 for循环
  • 【SSM 框架 | day27 spring MVC】
  • H618-配置静态IP
  • 全面解析网站建设及报价高端网约车有哪些平台
  • 商城 静态网站模板wordpress 作品集插件
  • 论文分享 |用线性复杂度实现Transformer级性能的递归网络新范式
  • 12_FastMCP 2.x 中文文档之FastMCP高级功能:图标详解
  • 打工人日报#20251106
  • 在Windows上通过WSL体验openEuler:打造高效的AI开发环境