
在 MySQL 中将时间(或日期时间)转换为字符串,主要使用
DATE_FORMAT() 函数。这是一个非常强大和常用的函数。
下面我将从基础到进阶,详细讲解如何使用它。
-
date: 你要转换的日期或日期时间列、变量或表达式。例如 NOW()、CURDATE() 或者一个表中的 created_at 字段。
-
format: 一个包含格式说明符的字符串,用来定义输出的样式。
假设我们有一个 orders 表,其中有一个 created_at 字段,类型为 DATETIME。
CREATE TABLE orders (
id INT PRIMARY KEY,
product_name VARCHAR(100),
created_at DATETIME
);
INSERT INTO orders VALUES (1, 'Laptop', '2023-10-27 15:30:05');
INSERT INTO orders VALUES (2, 'Mouse', '2023-01-05 09:08:07');
这是最常见的需求之一。
SELECT
id,
product_name,
created_at,
DATE_FORMAT(created_at, '%Y-%m-%d') AS formatted_date
FROM
orders;
结果:
这在中文环境中非常常用。
SELECT
id,
DATE_FORMAT(created_at, '%Y年%m月%d日 %H:%i:%s') AS formatted_datetime
FROM
orders;
结果:
SELECT
id,
DATE_FORMAT(created_at, '%H:%i') AS order_time
FROM
orders;
结果:
SELECT
id,
DATE_FORMAT(created_at, '%M %d, %Y') AS english_date
FROM
orders;
结果:
你可以在格式字符串中加入任何你想要的固定文本。
SELECT
id,
DATE_FORMAT(created_at, 'Order placed on %W, %M %e, %Y at %h:%i %p') AS full_description
FROM
orders;
结果:
有时候你也需要做反向操作,将字符串解析为日期时间类型,这时会用到 STR_TO_DATE() 函数。
STR_TO_DATE(string, format)
SELECT STR_TO_DATE('2023年10月27日', '%Y年%m月%d日') AS converted_date;
SELECT STR_TO_DATE('15:30:05', '%H:%i:%s') AS converted_time;
注意:STR_TO_DATE 的 format 必须和你的 string 格式完全匹配,否则会返回 NULL。
DATE_FORMAT() 是处理 MySQL 日期时间格式化最核心、最灵活的工具。熟练掌握常用的格式说明符,就能满足绝大多数开发需求。