好的,我给你整理一份 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 |
%H | 24小时 | 15 |
%h/%I | 12小时 | 03 |
%i | 分钟 | 09 |
%s | 秒 | 07 |
%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
实战应用
- 只显示年份和月份:
SELECT DATE_FORMAT(order_date, '%Y-%m') AS year_month FROM orders;
- 按星期分组:
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
实战应用
- 将非标准日期字符串转换为日期类型:
INSERT INTO orders (order_date)
VALUES (STR_TO_DATE('20-08-2025 08:30 AM', '%d-%m-%Y %h:%i %p'));
- 用于条件查询:
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
结果是 日期类型,可用于比较和计算
发表回复