首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

MySQL 日期時間函數大全:DATE_FORMAT 格式化符號表、常用函數、實戰示例

     編輯:PHP 相關知識

DATE_FORMAT 格式化符號完整表

符號含義示例輸出
%Y4位年份2024
%y2位年份24
%M月份全名January
%b月份縮寫Jan
%m月份 01-1201
%c月份 1-121
%D帶後綴日期1st, 2nd
%d日期 01-3101
%e日期 1-311
%W星期全名Sunday
%a星期縮寫Sun
%w星期 0(日)-6(六)0
%H小時 00-2314
%k小時 0-2314
%h/%I小時 01-1202
%l小時 1-122
%i分鐘 00-5905
%S/%s秒 00-5909
%r12小時制時間02:05:09 PM
%T24小時制時間14:05:09
%pAM/PMPM
%j年內天數 001-366001
%U週數 00-53 (周日為週首)01
%u週數 00-53 (周一為週首)01
%%字面 % 符號%

核心日期時間函數

函數說明示例
NOW()當前日期時間2024-01-15 14:30:00
CURDATE()當前日期2024-01-15
CURTIME()當前時間14:30:00
DATE()提取日期部分DATE(NOW()) -> 2024-01-15
TIME()提取時間部分TIME(NOW()) -> 14:30:00
DATE_FORMAT(d,f)格式化輸出DATE_FORMAT(NOW(),'%Y-%m-%d')
TIME_FORMAT(t,f)時間格式化TIME_FORMAT(NOW(),'%H:%i')
DATE_ADD(d,INTERVAL)日期加法DATE_ADD(NOW(),INTERVAL 1 DAY)
DATE_SUB(d,INTERVAL)日期減法DATE_SUB(NOW(),INTERVAL 1 MONTH)
DATEDIFF(d1,d2)日期差天數DATEDIFF('2024-01-15','2024-01-01')=14
TIMESTAMPDIFF(unit,d1,d2)精確差值TIMESTAMPDIFF(SECOND, t1, t2)
STR_TO_DATE(str,fmt)字符串解析為日期STR_TO_DATE('15/01/2024','%d/%m/%Y')
UNIX_TIMESTAMP()轉時間戳UNIX_TIMESTAMP('2024-01-15')
FROM_UNIXTIME(ts)時間戳轉日期FROM_UNIXTIME(1705312200)
LAST_DAY(d)月份最後一天LAST_DAY('2024-02-01')=2024-02-29
DAYOFWEEK(d)星期索引 1(日)-7(六)DAYOFWEEK(NOW())
QUARTER(d)季度 1-4QUARTER(NOW())

實戰示例

-- 1. 常用格式化
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s');     -- 2024-01-15 14:30:09
SELECT DATE_FORMAT(NOW(), '%Y年%m月%d日 %H點%i分');   -- 2024年01月15日 14點30分
SELECT DATE_FORMAT(NOW(), '%W, %M %D, %Y');         -- Monday, January 15th, 2024

-- 2. 日期運算
SELECT DATE_ADD(CURDATE(), INTERVAL 30 DAY);        -- 30天后
SELECT DATE_SUB(NOW(), INTERVAL 2 HOUR);            -- 2小時前
SELECT DATEDIFF('2024-12-31', CURDATE());           -- 今年剩余天數

-- 3. 統計按天/月/年分組
SELECT DATE_FORMAT(create_time, '%Y-%m') AS month, COUNT(*) 
FROM orders GROUP BY month;

-- 4. 解析非標準格式字符串
SELECT STR_TO_DATE('2024/01/15 14:30', '%Y/%m/%d %H:%i');

-- 5. 時間戳互轉
SELECT UNIX_TIMESTAMP('2024-01-15 14:30:00');
SELECT FROM_UNIXTIME(1705312200, '%Y-%m-%d %H:%i:%s');

時區處理

-- 會話級設置
SET time_zone = '+08:00'; -- 或 'Asia/Shanghai'

-- 查看當前時區
SELECT @@time_zone, @@system_time_zone;

-- 轉換時區 (MySQL 8.0+)
SELECT CONVERT_TZ(NOW(), '+00:00', '+08:00');

性能提示

  • 避免在 WHERE 條件中對列使用函數:`WHERE DATE_FORMAT(create_time, '%Y-%m') = '2024-01'` → 無法用索引
  • 改用範圍查詢:`WHERE create_time >= '2024-01-01' AND create_time < '2024-02-01'`
  • 大量格式化輸出考慮在應用層處理,減少數據庫 CPU
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved