在 MySQL 中格式化时间和日期是一个非常核心且常用的操作。这主要通过内置的 DATE_FORMAT() 函数来实现。
-
date: 你要格式化的日期或日期时间列。
-
format: 一个包含格式说明符的字符串,用于定义最终的输出样式。
以下是一些最常用的格式符号,你可以像搭积木一样组合它们:
假设我们有一个 orders 表,其中包含一个 created_at 列,其值为 2023-10-27 15:08:30。
这是最常见的日期格式。
SELECT DATE_FORMAT(created_at, '%Y-%m-%d') AS formatted_date
FROM orders;
结果: 2023-10-27
SELECT DATE_FORMAT(created_at, '%Y年%m月%d日') AS formatted_date
FROM orders;
结果: 2023年10月27日
SELECT DATE_FORMAT(created_at, '%Y-%m-%d %H:%i:%s') AS formatted_datetime
FROM orders;
结果: 2023-10-27 15:08:30
SELECT DATE_FORMAT(created_at, '%Y年%m月%d日 (%W)') AS formatted_date
FROM orders;
结果: 2023年10月27日 (Friday)
注意: MySQL 默认不直接支持输出中文星期(如 “星期五”)。如果需要,通常需要在应用层处理,或者在 SQL 中使用 CASE 语句进行转换。
SELECT DATE_FORMAT(created_at, '%Y') AS year
FROM orders;
SELECT DATE_FORMAT(created_at, '%m') AS month
FROM orders;
这是 DATE_FORMAT 在数据分析中的强大应用,例如按天统计订单数量。
SELECT
DATE_FORMAT(created_at, '%Y-%m-%d') AS order_date,
COUNT(*) AS total_orders
FROM
orders
GROUP BY
order_date
ORDER BY
order_date;
结果:
+------------+--------------+
| order_date | total_orders |
+------------+--------------+
| 2023-10-25 | 10 |
| 2023-10-26 | 15 |
| 2023-10-27 | 23 |
+------------+--------------+
如果你有一个非标准格式的字符串,想把它转换成 MySQL 的 DATE 或 DATETIME 类型以便进行比较或计算,可以使用 STR_TO_DATE()。
SELECT STR_TO_DATE('27/10/2023', '%d/%m/%Y') AS converted_date;
SELECT STR_TO_DATE('October 27, 2023 15:08', '%M %d, %Y %H:%i') AS converted_datetime;
-
格式化输出:使用
DATE_FORMAT(date, format)。
-
字符串转日期:使用
STR_TO_DATE(string, format)。
-
关键:掌握常用的格式符号(如
%Y, %m, %d, %H, %i, %s)是灵活运用这两个函数的基础。