MYSQL_DATE_FORMAT()_函数_详解_mysql 日期格式化
DATE_FORMAT()
是 MySQL 中最常用的日期时间格式化函数,它允许你按照指定的格式显示日期/时间值。
一、基本语法
sql
DATE_FORMAT(date, format)
-
date
:有效的日期或时间表达式(如日期字段、NOW() 等) -
format
:定义输出格式的格式字符串
二、格式说明符大全
1. 年部分
2. 月部分
3. 日部分
4. 周部分
5. 时间部分
6. 其他格式
三、实用示例
1. 基础格式化
sql
-- 标准日期时间格式SELECT DATE_FORMAT(NOW(), \'%Y-%m-%d %H:%i:%s\') AS formatted_datetime;-- 中文日期格式SELECT DATE_FORMAT(NOW(), \'%Y年%m月%d日\') AS chinese_date;-- 美国日期格式SELECT DATE_FORMAT(NOW(), \'%m/%d/%Y\') AS us_date;-- 带星期的时间格式SELECT DATE_FORMAT(NOW(), \'%W, %M %d, %Y %h:%i %p\') AS full_format;
2. 表格数据格式化
sql
-- 格式化表中的日期字段SELECT id, DATE_FORMAT(created_at, \'%Y-%m-%d\') AS create_date, DATE_FORMAT(updated_at, \'%H:%i:%s\') AS update_timeFROM users;
3. 条件格式化
sql
-- 根据不同条件使用不同格式SELECT id, CASE WHEN DATE(created_at) = CURDATE() THEN DATE_FORMAT(created_at, \'今天 %H:%i\') ELSE DATE_FORMAT(created_at, \'%Y-%m-%d\') END AS display_timeFROM orders;
四、性能考虑
-
索引使用:在 WHERE 子句中对日期字段使用 DATE_FORMAT() 会导致索引失效
sql
-- 不推荐(索引失效)SELECT * FROM orders WHERE DATE_FORMAT(created_at, \'%Y-%m-%d\') = \'2023-05-15\';-- 推荐(可以使用索引)SELECT * FROM orders WHERE created_at BETWEEN \'2023-05-15 00:00:00\' AND \'2023-05-15 23:59:59\';
-
存储格式化值:如需频繁使用特定格式,可考虑新增一个计算列
sql
ALTER TABLE orders ADD COLUMN create_date_str VARCHAR(10) GENERATED ALWAYS AS (DATE_FORMAT(created_at, \'%Y-%m-%d\')) STORED;
五、与其他函数的结合
sql
-- 与CONCAT结合SELECT CONCAT(\'订单创建于: \', DATE_FORMAT(created_at, \'%Y年%m月%d日\')) AS order_infoFROM orders;-- 与DATE_ADD/DATE_SUB结合SELECT DATE_FORMAT(DATE_ADD(NOW(), INTERVAL 7 DAY), \'%Y-%m-%d\') AS next_week;
六、注意事项
-
NULL 值处理:如果日期参数为 NULL,函数返回 NULL
-
无效格式:如果格式字符串无效,MySQL 会返回错误
-
时区影响:格式化结果受 MySQL 时区设置影响
-
语言环境:月份和星期名称的显示取决于系统的 lc_time_names 变量