萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 日期格式化函數 DATE_FORMAT 完整格式符號表與實例

DATE_FORMAT(date, format) 語法

依 format 字串格式化 DATE、DATETIME、TIMESTAMP 值,返回字串。

完整格式符號對照表

符號含義範例輸出
%S, %s秒 (00-59)05
%i分 (00-59)30
%H時 24制 (00-23)14
%h, %I時 12制 (01-12)02
%k時 24制 (0-23)14
%l時 12制 (1-12)2
%T時間 24制 (HH:MM:SS)14:30:05
%r時間 12制 (hh:mm:ss AM/PM)02:30:05 PM
%pAM/PMPM
%W星期全名Sunday
%a星期縮寫Sun
%d月內天數 (00-31)05
%e月內天數 (0-31)5
%D帶英文後綴天數5th
%w週內天數 (0=Sunday)0
%j年內天數 (001-366)035
%U週數 (00-53, Sunday 首日)05
%u週數 (00-53, Monday 首日)05
%M月份全名January
%b月份縮寫Jan
%m月份 (01-12)01
%c月份 (1-12)1
%Y四位年份2024
%y兩位年份24
%%字面 %%

常用組合範例

-- 標準日期時間
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s');  -- 2024-01-15 14:30:05

-- 中文友好
SELECT DATE_FORMAT(NOW(), '%Y年%m月%d日 %H:%i');  -- 2024年01月15日 14:30

-- 只取日期
SELECT DATE_FORMAT(create_time, '%Y-%m-%d') AS create_date FROM orders;

-- 只取月份 (用於分組統計)
SELECT DATE_FORMAT(create_time, '%Y-%m') AS month, COUNT(*) FROM orders GROUP BY month;

-- 週報標題
SELECT CONCAT('Week ', DATE_FORMAT(NOW(), '%X-%V'));  -- Week 2024-03

反向解析:STR_TO_DATE

SELECT STR_TO_DATE('2024-01-15 14:30:05', '%Y-%m-%d %H:%i:%s');
-- 字串轉 DATETIME,格式符號同 DATE_FORMAT

效能提示

  • DATE_FORMAT 在 WHERE 條件中會導致**索引失效** (無法使用索引範圍掃描)
  • 查詢條件請用原始欄位比較:
    ❌ WHERE DATE_FORMAT(created_at, '%Y-%m') = '2024-01'
    ✅ WHERE created_at >= '2024-01-01' AND created_at < '2024-02-01'
  • 僅在 SELECT 列表/ORDER BY/GROUP BY 中使用格式化

時區注意

DATE_FORMAT 使用會話時區 (@@session.time_zone)。跨時區應用建議統一儲存 UTC,顯示時在應用層轉換或 CONVERT_TZ()。

**收藏此表,寫日期格式化不再查手冊。**

copyright © 萬盛學電腦網 all rights reserved