【數據庫】Mysql日期/時間相關函數彙總

當我們處理日期時,最難的任務恐怕是確保所插入的日期的格式,與數據庫中日期列的格式相匹配。
只要數據包含的只是日期部分,運行查詢就不會出問題。但是,如果涉及時間,情況就有點複雜了。
在討論日期查詢的複雜性之前,我們先來看看最重要的內建日期處理函數。

MySQL Date 函數

下面的表格列出了 MySQL 中最重要的內建日期函數:

函數 描述
NOW() 返回當前的日期和時間
CURDATE() 返回當前的日期
CURTIME() 返回當前的時間
DATE() 提取日期或日期/時間表達式的日期部分
EXTRACT() 返回日期/時間按的單獨部分
DATE_ADD() 給日期添加指定的時間間隔
DATE_SUB() 從日期減去指定的時間間隔
DATEDIFF() 返回兩個日期之間的天數
DATE_FORMAT() 用不同的格式顯示日期/時間

下面通過具體列子說明每個函數的使用方法:

# 當前完整時間
select now() as 當前時間1;                 -- 2019-11-12 10:29:50
select current_timestamp() as 當前時間2;   -- 2019-11-12 10:29:50


# 當前日期或時間部分
select current_date() as 當前日期部分1;    -- 2019-11-12 
select CURDATE() as 當前日期部分2;         -- 2019-11-12 
select DATE(now()) as 獲取日期部分3;       -- 2019-11-12
select current_time() as 當前時間部分1;    -- 10:28:58
select CURTIME() as 當前時間部分2;         -- 10:28:58
select time(now()) as 獲取時間部分3;       -- 10:28:58


# 時間戳與時間之間轉化
select unix_timestamp() as 獲得unix時間戳;                   -- 1573525853
select from_unixtime(unix_timestamp()) as 從時間戳獲得時間;  -- 2019-11-12 10:30:53


# 返回日期/時間的單獨部分(年、月、日等)
select EXTRACT(YEAR  FROM now()) as 返回年份;                -- 2019
select EXTRACT(MONTH FROM now()) as 返回月份;                -- 11
select EXTRACT(DAY   FROM now()) as 返回天數;                -- 12
select year(now())  as 返回年份2;                            -- 2019
select month(now()) as 返回月份2;                            -- 11
select day(now())   as 返回天數2;                            -- 12


# 對日期進行格式化
select DATE_FORMAT(now(), '%Y%m%d') as 格式化時間1;          -- 20191112
select DATE_FORMAT(now(), '%Y%m01') as 格式化時間2;          -- 20191101
select DATE_FORMAT(now(), '%Y-%m')  as 格式化時間3;          -- 2019-11


# 時間相加減
select DATE_SUB(now(),interval 1 day) as 日期相減1;          -- 2019-11-11 10:32:22
select DATE_ADD(now(),interval -1 day) as 日期相減2;         -- 2019-11-11 10:32:22

select DATE_ADD(now(),interval 1 day) as 日期相加1;          -- 2019-11-13 10:32:22
select DATE_SUB(now(),interval -1 day) as 日期相加2;         -- 2019-11-13 10:32:22


# 前面減後面(只計算天數)
select DATEDIFF(DATE_ADD(now(),interval 1 day),now()) as 前面日期減後面日期得到天數;

# 後面減去前面
SELECT TIMESTAMPDIFF(YEAR, '2018-11-13 00:00:00',now()) as 相差年份數;    -- 當前日期2019-11-12:如果2019-11-12 00:00:00結果1;2019-11-11 00:00:00結果1;2019-11-13 00:00:00結果0
SELECT TIMESTAMPDIFF(MONTH,'2019-03-13 00:00:00',now()) as 相差月份數;    -- 當前日期2019-11-12:如果2019-03-12 00:00:00結果8;2019-03-11 00:00:00結果8;2019-03-13 00:00:00結果7
SELECT TIMESTAMPDIFF(DAY,  '2019-11-11 11:00:00',now()) as 相差天數;      -- 當前日期2019-11-12 11:00:00 :如果2019-11-11 11:00:00結果1;2019-11-11 10:00:00結果1;2019-11-11 12:00:00結果0

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章