MySQL CURDATE() 函數 (取得當前日期)
CURDATE() 是 MySQL 中用來取得當前日期的函數。它只返回日期部分,不包含時間,格式為 YYYY-MM-DD。
CURRENT_DATE 和 CURRENT_DATE() 是 CURDATE() 的同義詞,可以互換使用。
CURDATE() 語法 (Syntax)
CURDATE()
-- 或
CURRENT_DATE
-- 或
CURRENT_DATE()
CURDATE() 函數用法範例 (Example)
基本用法
SELECT CURDATE();
-- 結果:2024-11-22
SELECT CURRENT_DATE;
-- 結果:2024-11-22
計算日期差異
-- 計算訂單距離今天已經過了幾天
SELECT
order_id,
order_date,
DATEDIFF(CURDATE(), order_date) AS days_since_order
FROM orders;
篩選今天的記錄
-- 取得今天的訂單
SELECT * FROM orders WHERE DATE(order_date) = CURDATE();
-- 或者(如果 order_date 欄位是 DATE 類型)
SELECT * FROM orders WHERE order_date = CURDATE();
計算過去和未來的日期
-- 取得昨天、今天、明天的日期
SELECT
DATE_SUB(CURDATE(), INTERVAL 1 DAY) AS yesterday,
CURDATE() AS today,
DATE_ADD(CURDATE(), INTERVAL 1 DAY) AS tomorrow;
-- 結果:2024-11-21, 2024-11-22, 2024-11-23
-- 取得上週和下週的同一天
SELECT
DATE_SUB(CURDATE(), INTERVAL 1 WEEK) AS last_week,
DATE_ADD(CURDATE(), INTERVAL 1 WEEK) AS next_week;
-- 取得上個月和下個月的同一天
SELECT
DATE_SUB(CURDATE(), INTERVAL 1 MONTH) AS last_month,
DATE_ADD(CURDATE(), INTERVAL 1 MONTH) AS next_month;
取得本月資料
-- 取得本月的所有訂單
SELECT * FROM orders
WHERE YEAR(order_date) = YEAR(CURDATE())
AND MONTH(order_date) = MONTH(CURDATE());
-- 或使用更有效率的方式
SELECT * FROM orders
WHERE order_date >= DATE_FORMAT(CURDATE(), '%Y-%m-01')
AND order_date < DATE_ADD(DATE_FORMAT(CURDATE(), '%Y-%m-01'), INTERVAL 1 MONTH);
計算年齡
SELECT
name,
birthday,
TIMESTAMPDIFF(YEAR, birthday, CURDATE()) AS age
FROM users;
CURDATE() 與 NOW() 的比較
| 函數 | 返回類型 | 範例結果 |
|---|---|---|
| CURDATE() | DATE | 2024-11-22 |
| NOW() | DATETIME | 2024-11-22 14:30:45 |
SELECT CURDATE(), NOW();
-- 結果:2024-11-22, 2024-11-22 14:30:45
CURDATE() 的數值用法
CURDATE() 在數值運算中會被轉換為數字格式:
SELECT CURDATE() + 0;
-- 結果:20241122(YYYYMMDD 格式的數字)
SELECT CURDATE() + 1;
-- 結果:20241123(不建議這樣使用,應使用 DATE_ADD())
⚠️ 注意: 雖然可以直接對日期進行數學運算,但建議使用
DATE_ADD()和DATE_SUB()函數,這樣程式碼更清晰且不易出錯。