MySQL CURDATE() 函數 (取得當前日期)

CURDATE() 是 MySQL 中用來取得當前日期的函數。它只返回日期部分,不包含時間,格式為 YYYY-MM-DD

CURRENT_DATECURRENT_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()DATE2024-11-22
NOW()DATETIME2024-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() 函數,這樣程式碼更清晰且不易出錯。

更多 MySQL 相關的日期時間函數在這邊
更多 SQL Server 相關的日期時間函數在這邊