本文聚焦 MySQL 中獲取系統當前時間的函數用法,以及如何靈活格式化輸出滿足不同業務場景需求。
NOW():返回當前日期時間 YYYY-MM-DD HH:MM:SSCURDATE():僅返回日期 YYYY-MM-DDCURTIME():僅返回時間 HH:MM:SSDATE_FORMAT(date, format):自定義格式化輸出-- 1. 獲取完整當前時間
SELECT NOW();
-- 結果:2024-01-15 14:30:45
-- 2. 格式化為「年-月-日」
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d');
-- 結果:2024-01-15
-- 3. 格式化為「時:分:秒」
SELECT DATE_FORMAT(NOW(), '%H:%i:%s');
-- 結果:14:30:45
-- 4. 中文友好格式
SELECT DATE_FORMAT(NOW(), '%Y年%m月%d日 %H時%i分');
-- 結果:2024年01月15日 14時30分
-- 5. 表字段格式化查詢
SELECT id, username, DATE_FORMAT(create_time, '%Y-%m-%d') AS reg_date FROM users;
錯誤示範:CREATE TABLE t (dt DATETIME DEFAULT NOW()); → 報錯:MySQL 不允許在列定義中使用 NOW() 作為默認值(除 TIMESTAMP 類型外)。
正確做法:
TIMESTAMP DEFAULT CURRENT_TIMESTAMP(自動記錄插入/更新時間)NOW()DATETIME DEFAULT CURRENT_TIMESTAMP| 代碼 | 含義 | 範例 |
|---|---|---|
| %Y | 4位年份 | 2024 |
| %m | 2位月份 | 01 |
| %d | 2位日期 | 15 |
| %H | 24制小時 | 14 |
| %i | 分鐘 | 30 |
| %s | 秒 | 45 |
| %W | 星期全稱 | Monday |
| %% | 字面% | % |
-- 根據需求動態拼接格式
SET @fmt = CONCAT('%Y-%m-%d', IF(@show_time=1, ' %H:%i:%s', ''));
SELECT DATE_FORMAT(NOW(), @fmt);