
在 MySQL 中將時(shí)間(或日期時(shí)間)轉(zhuǎn)換為字符串,主要使用
DATE_FORMAT() 函數(shù)。這是一個(gè)非常強(qiáng)大和常用的函數(shù)。
下面我將從基礎(chǔ)到進(jìn)階,詳細(xì)講解如何使用它。
-
date: 你要轉(zhuǎn)換的日期或日期時(shí)間列、變量或表達(dá)式。例如 NOW()、CURDATE() 或者一個(gè)表中的 created_at 字段。
-
format: 一個(gè)包含格式說(shuō)明符的字符串,用來(lái)定義輸出的樣式。
假設(shè)我們有一個(gè) orders 表,其中有一個(gè) created_at 字段,類(lèi)型為 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');
這是最常見(jiàn)的需求之一。
SELECT
id,
product_name,
created_at,
DATE_FORMAT(created_at, '%Y-%m-%d') AS formatted_date
FROM
orders;
結(jié)果:
這在中文環(huán)境中非常常用。
SELECT
id,
DATE_FORMAT(created_at, '%Y年%m月%d日 %H:%i:%s') AS formatted_datetime
FROM
orders;
結(jié)果:
SELECT
id,
DATE_FORMAT(created_at, '%H:%i') AS order_time
FROM
orders;
結(jié)果:
SELECT
id,
DATE_FORMAT(created_at, '%M %d, %Y') AS english_date
FROM
orders;
結(jié)果:
你可以在格式字符串中加入任何你想要的固定文本。
SELECT
id,
DATE_FORMAT(created_at, 'Order placed on %W, %M %e, %Y at %h:%i %p') AS full_description
FROM
orders;
結(jié)果:
有時(shí)候你也需要做反向操作,將字符串解析為日期時(shí)間類(lèi)型,這時(shí)會(huì)用到 STR_TO_DATE() 函數(shù)。
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 格式完全匹配,否則會(huì)返回 NULL。
DATE_FORMAT() 是處理 MySQL 日期時(shí)間格式化最核心、最靈活的工具。熟練掌握常用的格式說(shuō)明符,就能滿(mǎn)足絕大多數(shù)開(kāi)發(fā)需求。