mysql日期和時(shí)間的間隔計(jì)算實(shí)例分析
本文實(shí)例講述了mysql日期和時(shí)間的間隔計(jì)算。分享給大家供大家參考,具體如下:
我們首先得明確一點(diǎn),mysql間隔值主要用于日期和時(shí)間計(jì)算,如果我們要要?jiǎng)?chuàng)建間隔值,可以使用以下表達(dá)式:
INTERVAL expr unit
然后嘞,我們得了解,INTERVAL關(guān)鍵字是確定間隔值的expr,以及指定間隔單位的單位。 例如,要?jiǎng)?chuàng)建1天間隔,我們就要使用以下表達(dá)式:
INTERVAL 1 DAY
不過(guò)我們要注意,INTERVAL和UNIT不區(qū)分大小寫(xiě),因此以下表達(dá)式與上述表達(dá)式相當(dāng):
interval 1 day
日期和時(shí)間算術(shù)的間隔值的實(shí)際用法和語(yǔ)法,我們可以看下面的代碼:
date + INTERVAL expr unit date - INTERVAL expr unit
間隔值同樣也用于各種時(shí)間函數(shù),如DATE_ADD,DATE_SUB,TIMESTAMPADD和TIMESTAMPDIFF。mysql定義了expr和unit的標(biāo)準(zhǔn)格式,如下表所示:
單位(unit) | 表達(dá)式(expr) |
---|---|
DAY | DAYS |
DAY_HOUR | ‘DAYS HOURS' |
DAY_MICROSECOND | ‘DAYS HOURS:MINUTES:SECONDS.MICROSECONDS' |
DAY_MINUTE | ‘DAYS HOURS:MINUTES' |
DAY_SECOND | ‘DAYS HOURS:MINUTES:SECONDS' |
HOUR | HOURS |
HOUR_MICROSECOND | ‘HOURS:MINUTES:SECONDS.MICROSECONDS' |
HOUR_MINUTE | ‘HOURS:MINUTES' |
HOUR_SECOND | ‘HOURS:MINUTES:SECONDS' |
MICROSECOND | MICROSECONDS |
MINUTE | MINUTES |
MINUTE_MICROSECOND | ‘MINUTES:SECONDS.MICROSECONDS' |
MINUTE_SECOND | ‘MINUTES:SECONDS' |
MONTH | MONTHS |
QUARTER | QUARTERS |
SECOND | SECONDS |
SECOND_MICROSECOND | ‘SECONDS.MICROSECONDS' |
WEEK | WEEKS |
YEAR | YEARS |
YEAR_MONTH | ‘YEARS-MONTHS' |
我們來(lái)看個(gè)實(shí)例,下面的sql語(yǔ)句在2020-01-01日期上增加1天返回結(jié)果為,2020-01-02:
mysql> SELECT '2020-01-01' + INTERVAL 1 DAY; +-------------------------------+ | '2020-01-01' + INTERVAL 1 DAY | +-------------------------------+ | 2020-01-02 | +-------------------------------+ 1 row in set (0.01 sec)
如果我們?cè)谏婕癉ATE或DATETIME值的表達(dá)式中使用了間隔值,并且間隔值位于表達(dá)式的右側(cè),則可以使用expr的負(fù)值,如以下示例所示:
mysql> SELECT '2020-01-01' + INTERVAL -1 DAY; +--------------------------------+ | '2020-01-01' + INTERVAL -1 DAY | +--------------------------------+ | 2019-12-31 | +--------------------------------+ 1 row in set
我們?cè)賮?lái)看如何使用DATE_ADD和DATE_SUB從日期值添加/減去1個(gè)月:
mysql> SELECT DATE_ADD('2020-01-01', INTERVAL 1 MONTH) 1_MONTH_LATER, DATE_SUB('2020-01-01',INTERVAL 1 MONTH) 1_MONTH_BEFORE; +---------------+----------------+ | 1_MONTH_LATER | 1_MONTH_BEFORE | +---------------+----------------+ | 2020-02-01 | 2019-12-01 | +---------------+----------------+ 1 row in set
完事再來(lái)看一個(gè)sql使用TIMESTAMPADD(unit,interval,expression)函數(shù)向時(shí)間戳值添加30分鐘:
mysql> SELECT TIMESTAMPADD(MINUTE,30,'2020-01-01') 30_MINUTES_LATER; +---------------------+ | 30_MINUTES_LATER | +---------------------+ | 2020-01-01 00:30:00 | +---------------------+ 1 row in set
說(shuō)這么多,大家可能還有點(diǎn)懵,不怕,來(lái)看具體的操作,我們創(chuàng)建一個(gè)名為memberships的新表,用于演示:
CREATE TABLE memberships ( id INT AUTO_INCREMENT PRIMARY KEY, email VARCHAR(355) NOT NULL, plan VARCHAR(255) NOT NULL, expired_date DATE NOT NULL );
在上面的memberships表中,expired_date列存儲(chǔ)每個(gè)會(huì)員的會(huì)員資格到期日,完事我們插入一部分?jǐn)?shù)據(jù)到memberships表中:
INSERT INTO memberships(email, plan, expired_date) VALUES('john.doe@yiibai.com','Gold','2018-07-13'), ('jane.minsu@yiibai.com','Platinum','2018-07-10'), ('david.corp@yiibai.com','Silver','2018-07-15'), ('julia.william@yiibai.com','Gold','2018-07-20'), ('peter.drucker@yiibai.com','Silver','2018-07-08');
現(xiàn)在我們來(lái)假設(shè)今天是2018-07-06,然后我們來(lái)使用sql語(yǔ)句查詢(xún)?cè)谖磥?lái)7天內(nèi)會(huì)員資格將要過(guò)期的會(huì)員:
SELECT email, plan, expired_date, DATEDIFF(expired_date, '2018-07-06') remaining_days FROM memberships WHERE '2018-07-06' BETWEEN DATE_SUB(expired_date, INTERVAL 7 DAY) AND expired_date;
執(zhí)行上面查詢(xún)語(yǔ)句后,得到以下結(jié)果:
+--------------------------+----------+--------------+----------------+ | email | plan | expired_date | remaining_days | +--------------------------+----------+--------------+----------------+ | john.doe@yiibai.com | Gold | 2018-07-13 | 7 | | jane.minsu@yiibai.com | Platinum | 2018-07-10 | 4 | | peter.drucker@yiibai.com | Silver | 2018-07-08 | 2 | +--------------------------+----------+--------------+----------------+ 3 rows in set
在上面的sql中,DATE_SUB函數(shù)將間隔值(INTERVAL 7 DAY)指定的過(guò)期日期減去7天,也就是說(shuō),本來(lái)某條數(shù)據(jù)的日期是13號(hào),減去七天,那就是6號(hào)了。大概就是這個(gè)意思了,相信大家都有一定的理解了。
那咱們今天就到這里了。
更多關(guān)于MySQL相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《MySQL查詢(xún)技巧大全》、《MySQL事務(wù)操作技巧匯總》、《MySQL存儲(chǔ)過(guò)程技巧大全》、《MySQL數(shù)據(jù)庫(kù)鎖相關(guān)技巧匯總》及《MySQL常用函數(shù)大匯總》
希望本文所述對(duì)大家MySQL數(shù)據(jù)庫(kù)計(jì)有所幫助。
相關(guān)文章
MySQL建立唯一索引實(shí)現(xiàn)插入重復(fù)自動(dòng)更新
這篇文章給大家分享的是當(dāng)向數(shù)據(jù)插入數(shù)據(jù)時(shí),判斷字段是不是存在,存在執(zhí)行更新操作,如果不存在就執(zhí)行插入操作的方法,有需要的朋友們可以參考借鑒。2016-09-09淺析mysql 共享表空間與獨(dú)享表空間以及他們之間的轉(zhuǎn)化
本篇文章是對(duì)mysql 共享表空間與獨(dú)享表空間以及他們之間的轉(zhuǎn)化進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06MySQL 5.7及8.0版本數(shù)據(jù)庫(kù)的root密碼遺忘的解決方法
這篇文章主要介紹了MySQL 5.7及8.0版本數(shù)據(jù)庫(kù)的root密碼遺忘的解決辦法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2019-12-12詳解Spring Aop實(shí)現(xiàn)日志收集和重復(fù)屬性賦值
AOP(面向切面編程)是一種編程思想,它允許開(kāi)發(fā)者將公共邏輯(如日志記錄、權(quán)限校驗(yàn)等)抽離出來(lái),使得可以更專(zhuān)注于業(yè)務(wù)邏輯的開(kāi)發(fā),SpringAOP通過(guò)定義切面、切入點(diǎn)、通知等概念,本文介紹Spring Aop實(shí)現(xiàn)日志收集和重復(fù)屬性賦值的相關(guān)操作,感興趣的朋友一起看看吧2023-04-04mysql中如何根據(jù)經(jīng)緯度計(jì)算距離
這篇文章主要給大家介紹了關(guān)于mysql中如何根據(jù)經(jīng)緯度計(jì)算距離的相關(guān)資料,經(jīng)緯度距離計(jì)算方法是一種用來(lái)計(jì)算地球上兩個(gè)點(diǎn)之間距離的方法,它可以在MySQL數(shù)據(jù)庫(kù)中輕松實(shí)現(xiàn),非常適用于需要進(jìn)行地理定位的應(yīng)用程序,需要的朋友可以參考下2023-08-08