萬盛學電腦網

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

MySQL 日期時間函數大全(上):獲取當前時間、提取組件、UTC 轉換、週期計算

一、獲取當前日期時間

1. NOW() / CURRENT_TIMESTAMP() — 標準當前日期時間

SELECT NOW();          -- 2024-01-15 14:30:45
SELECT CURRENT_TIMESTAMP();

特性:語句執行開始時固定值,同一語句多次調用返回相同結果。

2. SYSDATE() — 動態當前日期時間

SELECT NOW(), SLEEP(3), NOW();     -- 兩次 NOW() 相同
SELECT SYSDATE(), SLEEP(3), SYSDATE(); -- 相差 3 秒

特性:函數執行時即時取值,適合高精度計時,但會禁用查詢緩存。

3. 日期/時間單獨獲取

CURDATE() / CURRENT_DATE()   -- 2024-01-15
CURTIME() / CURRENT_TIME()   -- 14:30:45

4. UTC 時間(跨時區業務必備)

SELECT UTC_TIMESTAMP(), UTC_DATE(), UTC_TIME(), NOW();
-- UTC 比本地時間(東八區)早 8 小時

二、日期時間組件提取

1. 基礎提取函數

SET @dt = '2024-01-15 14:30:45.123456';

SELECT DATE(@dt);        -- 2024-01-15
SELECT TIME(@dt);        -- 14:30:45.123456
SELECT YEAR(@dt);        -- 2024
SELECT QUARTER(@dt);     -- 1
SELECT MONTH(@dt);       -- 1
SELECT WEEK(@dt);        -- 3 (預設模式)
SELECT DAY(@dt);         -- 15
SELECT HOUR(@dt);        -- 14
SELECT MINUTE(@dt);      -- 30
SELECT SECOND(@dt);      -- 45
SELECT MICROSECOND(@dt); -- 123456

2. EXTRACT() 通用提取(功能最全)

SELECT EXTRACT(YEAR FROM @dt);           -- 2024
SELECT EXTRACT(QUARTER FROM @dt);        -- 1
SELECT EXTRACT(MONTH FROM @dt);          -- 1
SELECT EXTRACT(WEEK FROM @dt);           -- 3
SELECT EXTRACT(DAY FROM @dt);            -- 15
SELECT EXTRACT(HOUR FROM @dt);           -- 14
SELECT EXTRACT(MINUTE FROM @dt);         -- 30
SELECT EXTRACT(SECOND FROM @dt);         -- 45
SELECT EXTRACT(MICROSECOND FROM @dt);    -- 123456

-- 組合提取
SELECT EXTRACT(YEAR_MONTH FROM @dt);     -- 202401
SELECT EXTRACT(DAY_HOUR FROM @dt);       -- 1514
SELECT EXTRACT(DAY_MINUTE FROM @dt);     -- 151430
SELECT EXTRACT(DAY_SECOND FROM @dt);     -- 15143045
SELECT EXTRACT(DAY_MICROSECOND FROM @dt);-- 15143045123456

3. 星期相關

SET @d = '2024-01-15';  -- 星期一

SELECT DAYOFWEEK(@d);  -- 2 (1=Sun, 2=Mon...7=Sat)
SELECT WEEKDAY(@d);    -- 0 (0=Mon, 1=Tue...6=Sun)
SELECT DAYNAME(@d);    -- 'Monday'
SELECT MONTHNAME(@d);  -- 'January'

4. 週/年週計算

SELECT WEEK(@d);           -- 3 (模式 0)
SELECT WEEK(@d, 3);        -- 3 (模式 3,ISO 週)
SELECT WEEKOFYEAR(@d);     -- 3 (等同 WEEK(@d,3))
SELECT YEARWEEK(@d);       -- 202403

5. 月底日期

SELECT LAST_DAY('2024-02-01');  -- 2024-02-29 (閏年)
SELECT LAST_DAY('2024-01-15');  -- 2024-01-31

-- 取得當月天數
SELECT DAY(LAST_DAY(NOW()));    -- 31

三、日期時間運算

-- 加減 INTERVAL
SELECT DATE_ADD('2024-01-15', INTERVAL 10 DAY);     -- 2024-01-25
SELECT DATE_SUB('2024-01-15', INTERVAL 1 MONTH);    -- 2023-12-15
SELECT '2024-01-15' + INTERVAL 3 HOUR;              -- 2024-01-15 03:00:00

-- 日期差
SELECT DATEDIFF('2024-01-20', '2024-01-15');        -- 5
SELECT TIMESTAMPDIFF(DAY, '2024-01-15', '2024-01-20'); -- 5
SELECT TIMESTAMPDIFF(SECOND, '2024-01-15 00:00:00', NOW()); -- 秒差

四、字串轉換

-- 字串 → 日期時間
SELECT STR_TO_DATE('2024-01-15 14:30:45', '%Y-%m-%d %H:%i:%s');
-- 日期時間 → 字串
SELECT DATE_FORMAT(NOW(), '%Y年%m月%d日 %H時%i分');

常用格式符

copyright © 萬盛學電腦網 all rights reserved
符號含義範例
%Y四位年份2024
%m兩位月份01
%d兩位日期15
%H24制小時14
%i分鐘30
%s秒45
%f微秒123456
%W星期名稱Monday
%M月份名稱January