好的,我给你整理一份 MySQL 日期函数 DATE_FORMAT() 与 STR_TO_DATE() 的详细用法,包括语法、参数、示例和注意事项。


1️⃣ DATE_FORMAT() — 日期格式化

语法

DATE_FORMAT(date, format)
  • date:日期或日期时间字段
  • format:格式字符串,用于定义输出形式

常用格式化符号

格式符含义示例
%Y四位年份2025
%y两位年份25
%m两位月份08
%c月份(不补零)8
%d两位日05
%e日(不补零)5
%H24小时15
%h/%I12小时03
%i分钟09
%s07
%W星期几全称Tuesday
%a星期几缩写Tue
%M月份全称August
%b月份缩写Aug

示例

SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s') AS formatted_datetime;
-- 输出:2025-08-20 08:30:45

SELECT DATE_FORMAT('2025-08-20', '%W, %M %d, %Y') AS formatted_date;
-- 输出:Wednesday, August 20, 2025

实战应用

  1. 只显示年份和月份
SELECT DATE_FORMAT(order_date, '%Y-%m') AS year_month FROM orders;
  1. 按星期分组
SELECT DATE_FORMAT(order_date, '%W') AS week_day, COUNT(*) AS order_count
FROM orders
GROUP BY week_day;

2️⃣ STR_TO_DATE() — 字符串转日期

语法

STR_TO_DATE(str, format)
  • str:表示日期的字符串
  • format:字符串的格式,与 DATE_FORMAT 格式符相同

示例

SELECT STR_TO_DATE('2025-08-20', '%Y-%m-%d') AS date_val;
-- 输出:2025-08-20

SELECT STR_TO_DATE('20/08/2025 14:30', '%d/%m/%Y %H:%i') AS datetime_val;
-- 输出:2025-08-20 14:30:00

实战应用

  1. 将非标准日期字符串转换为日期类型
INSERT INTO orders (order_date)
VALUES (STR_TO_DATE('20-08-2025 08:30 AM', '%d-%m-%Y %h:%i %p'));
  1. 用于条件查询
SELECT * FROM orders
WHERE order_date = STR_TO_DATE('20/08/2025', '%d/%m/%Y');

3️⃣ 对比总结

函数作用常用场景
DATE_FORMAT()将日期/时间格式化为指定字符串报表显示、分组、展示
STR_TO_DATE()将字符串解析为日期/时间类型插入数据、查询条件、转换非标准日期

✅ 小技巧:

  • DATE_FORMAT 结果是 字符串,不能直接用于日期运算
  • STR_TO_DATE 结果是 日期类型,可用于比较和计算