MySQL加減間隔時間函數(shù)DATE_ADD和DATE_SUB的實現(xiàn)
前言
mysql中內(nèi)置函數(shù)date_add 和 date_sub能對指定的時間進行增加或減少一個指定的時間間隔,返回的是一個日期。
語法
添加時間間隔
DATE_ADD(date,INTERVAL expr type) SELECT DATE_add(NOW(),INTERVAL -7 DAY);//獲取7天前的日期 SELECT DATE_add(NOW(),INTERVAL 7 DAY);//獲取7天后的日期
減少時間間隔
DATE_SUB(date, INTERVAL expr type) SELECT DATE_SUB(NOW(),INTERVAL -7 DAY);//獲取7天后的日期 SELECT DATE_SUB(NOW(),INTERVAL 7 DAY);//獲取7天前的日期
參數(shù)說明
date 操作的時間
INTERVAL為關(guān)鍵詞
expr 具體數(shù)值
type 時間間隔單位
可用的type參數(shù)值如下:

注意:type可以復合型的,比如 YEAR_MONTH。如果type不是復合型的,DATE_ADD和DATE_SUB其實可以通用,因為expr可以為一個負數(shù)。對應復合型的type,需要使用引號對兩個參數(shù)進行引用起來,中間用任何非數(shù)字字符作為間隔即可,并且不能使用負數(shù)。但是時間間隔只指定了一個值, 那么也能正常工作,但是對應XXX_YYY使用的是下劃線后YYY的單位,也就相當于 一單位的type,這時也就可以使用負數(shù)。
示例代碼
復合型
select date_add('2024-04-29', interval '1 2' YEAR_MONTH); #結(jié)果:2025-06-29
select date_add('2024-04-29', interval '1-2' YEAR_MONTH); #結(jié)果:2025-06-29
select date_add('2024-04-29', interval '1,2' YEAR_MONTH); #結(jié)果:2025-06-29
select date_add('2024-04-29', interval 1 YEAR_MONTH); #結(jié)果:2024-05-29
select date_add('2024-04-29', interval -1 YEAR_MONTH); #結(jié)果:2024-03-29
# 這里先減1年,再減2月,最后減1天,有點意思
select date_sub('2024-04-29', interval '1 2' YEAR_MONTH); #結(jié)果:2023-02-28
select date_sub('2024-04-29', interval '1-2' YEAR_MONTH); #結(jié)果:2023-02-28
select date_sub('2024-04-29', interval '1,2' YEAR_MONTH); #結(jié)果:2023-02-28
select date_sub('2024-04-29', interval 1 YEAR_MONTH); #結(jié)果:2024-03-29
select date_sub('2024-04-29', interval -1 YEAR_MONTH); #結(jié)果:2024-05-29
非復合型
select date_add(now(), interval 1 day); # 加1天 2024-04-30 16:25:49 select date_add(now(),INTERVAL -1 DAY); # 當前日期向前推1天 2024-04-28 16:25:49 select date_add(now(), interval 1 hour);# 加1小時 2024-04-29 17:25:49 select date_add(now(), interval 1 minute); # 加1分鐘 2024-04-29 16:26:49 select date_add(now(), interval 1 second); # 加1秒 2024-04-29 16:25:50 select date_add(now(), interval 1 microsecond); # 加1毫秒 2024-04-29 16:25:49.000001 select date_add(now(), interval 1 week); # 加1周 2024-05-06 16:25:49 select date_add(now(), interval 1 month);# 加1月 2024-05-29 16:25:49 select date_add(now(), interval 1 quarter); # 加1季 2024-07-29 16:25:49 select date_add(now(), interval 1 year);# 加1年 2025-04-29 16:25:49 select date_sub(now(), interval 1 day); # 減1天 2024-04-28 16:31:34 select date_sub(now(),INTERVAL -1 DAY); # 當前日期向后推1天 2024-04-30 16:31:34 select date_sub(now(), interval 1 hour);# 減1小時 2024-04-29 15:31:34 select date_sub(now(), interval 1 minute); # 減1分鐘 2024-04-29 16:30:34 select date_sub(now(), interval 1 second); # 減1秒 2024-04-29 16:31:33 select date_sub(now(), interval 1 microsecond); # 減1毫秒 2024-04-29 16:31:33.999999 select date_sub(now(), interval 1 week); # 減1周 2024-04-22 16:31:34 select date_sub(now(), interval 1 month);# 減1月 2024-03-29 16:31:34 select date_sub(now(), interval 1 quarter); # 加1季 2024-01-29 16:31:34 select date_sub(now(), interval 1 year);# 減1年 2023-04-29 16:31:34
運用
電商系統(tǒng)往往會有這樣一個功能,客戶收到貨后如果七天不點擊收貨按鈕話,系統(tǒng)會自動將訂單設(shè)置為完成。這個功能就要求查詢妥投七天后沒有點擊收貨按鈕的訂單,將它們設(shè)置為完成。
相關(guān)SQL:
SELECT
o.order_id,
o.third_order_id
FROM
cere_shop_order o
WHERE
o.state < 4
AND o.interface_call_time <= DATE_SUB(NOW(), INTERVAL 7 DAY)
state 訂單狀態(tài),小于4查詢未完成的訂單,interface_call_time為妥投時間,o.interface_call_time <= DATE_SUB(NOW(), INTERVAL 7 DAY) 這里將當前時間減去7天后,再去和妥投時間進行比較,小于或等于這個結(jié)果的都是妥投超過了7天的訂單。
這是比較推薦的寫法,但還可以寫成
SELECT
o.order_id,
o.third_order_id
FROM
cere_shop_order o
WHERE
o.state < 4
AND DATE_ADD(o.interface_call_time,INTERVAL 7 DAY) < NOW();
這種寫法將要查詢的字段參與了函數(shù)計算,索引會失效,將會值全表掃描,性能很差,不推薦送使用。
到此這篇關(guān)于MySQL加減間隔時間函數(shù)DATE_ADD和DATE_SUB的實現(xiàn)的文章就介紹到這了,更多相關(guān)MySQL DATE_ADD和DATE_SUB內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- mysql?DATE_ADD函數(shù)用法舉例
- MySQL之DATE_ADD()和DATE_SUB()函數(shù)的使用方式
- mysql中日期的加減 date_add()、date_sub() 函數(shù)及用法小結(jié)
- mysql中使用date_add()函數(shù)講解
- MySQL DATE_ADD和ADDDATE函數(shù)實現(xiàn)向日期添加指定時間間隔
- MySQL的時間差函數(shù)(TIMESTAMPDIFF、DATEDIFF)、日期轉(zhuǎn)換計算函數(shù)(date_add、day、date_format、str_to_date)
- MySQL中DATE_ADD函數(shù)的具體使用
相關(guān)文章
MySql分組后隨機獲取每組一條數(shù)據(jù)的操作
這篇文章主要介紹了MySql分組后隨機獲取每組一條數(shù)據(jù)的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10
MySQL錯誤TIMESTAMP column with CURRENT_TIMESTAMP的解決方法
這篇文章主要介紹了MySQL錯誤TIMESTAMP column with CURRENT_TIMESTAMP的解決方法,需要的朋友可以參考下2014-06-06
Can’t open file:''[Table]mytable.MYI''
也許很多人遇到過類似Can’t open file: ‘[Table]mytable.MYI’ 這樣的錯誤信息,卻不知道怎么解決他,下面我們做個介紹,2011-01-01
MySQL中SQL連接操作左連接查詢(LEFT?JOIN)示例詳解
這篇文章主要給大家介紹了關(guān)于MySQL中SQL連接操作左連接查詢(LEFT?JOIN)的相關(guān)資料,左連接(LEFT?JOIN)是SQL中用于連接兩個或多個表的一種操作,它返回左表的所有行,并根據(jù)連接條件從右表中匹配行,需要的朋友可以參考下2024-12-12
找到一種不錯的從SQLServer轉(zhuǎn)成Mysql數(shù)據(jù)庫的方法
找到一種不錯的從SQLServer轉(zhuǎn)成Mysql數(shù)據(jù)庫的方法...2007-07-07

