1. 程式人生 > >mysql間隔之日期和時間計算

mysql間隔之日期和時間計算

    我們首先得明確一點,mysql間隔值主要用於日期和時間計算,如果我們要要建立間隔值,可以使用以下表達式:

INTERVAL expr unit

    然後嘞,我們得了解,INTERVAL關鍵字是確定間隔值的expr,以及指定間隔單位的單位。 例如,要建立1天間隔,我們就要使用以下表達式:

INTERVAL 1 DAY

    不過我們要注意,INTERVALUNIT不區分大小寫,因此以下表達式與上述表示式相當:

interval 1 day

    日期和時間算術的間隔值的實際用法和語法,我們可以看下面的程式碼:

date + INTERVAL expr unit
date - INTERVAL expr unit

    間隔值同樣也用於各種時間函式,如DATE_ADD,DATE_SUB,TIMESTAMPADDTIMESTAMPDIFF。mysql定義了exprunit的標準格式,如下表所示:

單位(unit)表示式(expr)
DAYDAYS
DAY_HOUR‘DAYS HOURS’
DAY_MICROSECOND‘DAYS HOURS:MINUTES:SECONDS.MICROSECONDS’
DAY_MINUTE‘DAYS HOURS:MINUTES’
DAY_SECOND‘DAYS HOURS:MINUTES:SECONDS’
HOURHOURS
HOUR_MICROSECOND‘HOURS:MINUTES:SECONDS.MICROSECONDS’
HOUR_MINUTE‘HOURS:MINUTES’
HOUR_SECOND‘HOURS:MINUTES:SECONDS’
MICROSECONDMICROSECONDS
MINUTEMINUTES
MINUTE_MICROSECOND‘MINUTES:SECONDS.MICROSECONDS’
MINUTE_SECOND‘MINUTES:SECONDS’
MONTHMONTHS
QUARTERQUARTERS
SECONDSECONDS
SECOND_MICROSECOND‘SECONDS.MICROSECONDS’
WEEKWEEKS
YEARYEARS
YEAR_MONTH‘YEARS-MONTHS’

    我們來看個例項,下面的sql語句在2020-01-01

日期上增加1天返回結果為,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)

    如果我們在涉及DATE或DATETIME值的表示式中使用了間隔值,並且間隔值位於表示式的右側,則可以使用expr的負值,如以下示例所示:

mysql> SELECT '2020-01-01' + INTERVAL -1 DAY;
+--------------------------------+
| '2020-01-01' + INTERVAL -1 DAY |
+--------------------------------+
| 2019-12-31                     |
+--------------------------------+
1 row in set

    我們再來看如何使用DATE_ADD和DATE_SUB從日期值新增/減去1個月:

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

    完事再來看一個sql使用TIMESTAMPADD(unit,interval,expression)函式向時間戳值新增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

    說這麼多,大家可能還有點懵,不怕,來看具體的操作,我們建立一個名為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列儲存每個會員的會員資格到期日,完事我們插入一部分資料到memberships表中:

INSERT INTO memberships(email, plan, expired_date)
VALUES('[email protected]','Gold','2018-07-13'),
      ('[email protected]','Platinum','2018-07-10'),
      ('[email protected]','Silver','2018-07-15'),
      ('[email protected]','Gold','2018-07-20'),
      ('[email protected]','Silver','2018-07-08');

    現在我們來假設今天是2018-07-06,然後我們來使用sql語句查詢在未來7天內會員資格將要過期的會員:

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;

    執行上面查詢語句後,得到以下結果:

+--------------------------+----------+--------------+----------------+
| 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函式將間隔值(INTERVAL 7 DAY)指定的過期日期減去7天,也就是說,本來某條資料的日期是13號,減去七天,那就是6號了。大概就是這個意思了,相信大家都有一定的理解了。

    那咱們今天就到這裡了。如果感覺不錯的話,請多多點贊支援哦。。。

相關推薦

mysql間隔日期時間計算

    我們首先得明確一點,mysql間隔值主要用於日期和時間計算,如果我們要要建立間隔值,可以使用以下表達式:INTERVAL expr unit    然後嘞,我們得了解,INTERVAL關鍵字是確

JDK8版本日期時間API詳解

nds 可變 nan r.java 允許 應該 之一 常用 技巧 伴隨lambda表達式、streams以及一系列小優化,Java 8 推出了全新的日期時間API,在教程中我們將通過一些簡單的實例來學習如何使用新API。Java處理日期、日歷和時間的方式一直為社區所詬病,將

Java8日期時間(四)

Java 8新增了LocalDate和LocalTime介面,為什麼要搞一套全新的處理日期和時間的API。因為舊的java.util.Date實在是太難用了。java.util.Date月份從0開始,一月是0,十二月是11,變態吧!java.time.LocalDate月份和

mysql常用函式----日期時間處理函式

對於每個型別擁有的值範圍以及並且指定日期何時間值的有效格式的描述見7.3.6 日期和時間型別。 這裡是一個使用日期函式的例子。下面的查詢選擇了所有記錄,其date_col的值是在最後30天以內: mysql> SELECT something FROM table

python日期時間

1、時鐘時間--time   time提供了很多管理時鐘時間的函式,如 1)獲取以秒為單位的浮點時間time(): >>> import time >>> print time.time()#獲取當前時間的浮點值,單位為秒 1369031293.33 >>&

MySQL資料型別--日期時間型別

MySQL中的多種時間和格式資料型別 日期和時間型別是為了方便在資料庫中儲存日期和時間而設計的。MySQL中有多種表示日期和時間的資料型別。 其中,year型別表示時間,date型別表示日期,time型別表示時間,datetime和timestamp表示日期和時間。實際情

MYSQL學習筆記三:日期時間函數

div content minute name top fonts table hmm 指定 MYSQL學習筆記三:日期和時間函數 1. 獲取當前日期的函數和獲取當前時間的函數 /*獲取當前日期的函數和獲取當前時間的函數。將日期以‘YYYY-MM-DD‘或者’YYYYM

Python自動化3.0-------學習路------日期時間

unix dst python自動化 相關 http -a 年份 字符串 cti Python 日期和時間 Python 程序能用很多方式處理日期和時間,轉換日期格式是一個常見的功能。 Python 提供了一個 time 和 calendar 模塊可以用於格式化日期和時間。

Flask從入門到精通Flask-Moment本地化日期時間

display second res width 依賴 post spl 分發 temp   Moment.js 是一個簡單易用的輕量級JavaScript日期處理類庫,提供了日期格式化、日期解析等功能。它支持在瀏覽器和NodeJS兩種環境中運行。此類庫能夠 將給定的任意日

python 3 日期時間處理模塊(datedatetime)

python 時間 處理模塊 前言相關術語的解釋時間的表現形式time模塊datetime模塊時間格式碼總結前言 在開發工作中,我們經常需要用到日期與時間,如: 作為日誌信息的內容輸出計算某個功能的執行時間用日期命名一個日誌文件的名稱記錄或展示某文章的發布或修改時間其他Python中提供了多個用於

Java8新特性:新的日期時間API

java8 時間日期API 一. LocalDate、LocalTime、Instant、Duration以及Period 1.LocalDate只提供日期,不含當天時間信息LocalDate date = LocalDate.of(2018, 5, 03); int year = da

mysql學習第三天練習(日期時間函數)

日期和時間 標準 學習第三天 入職 extract 時間 日期 如果 sys -- 日期和時間函數 -- 獲取當前日期 select curdate(),current_date() from dual -- 返回服務器當前的日期和時間 select NOW(),SYSD

Java 8新特性新的日期時間API

在Java 1.0中,對日期和時間的支援只能依賴java.util.Date類。這個類只能以毫秒的精度表示時間。這個類還有很多糟糕的問題,比如年份的起始選擇是1900年,月份的起始從0開始。這意味著你要想表示2018年8月22日,就必須建立下面這樣的Date例項: Date date = new Date

Python日期時間處理模組(datedatetime)

本節內容 前言 相關術語的解釋 時間的表現形式 time模組 datetime模組 時間格式碼 總結 前言 在開發工作中,我們經常需要用到日期與時間,如: 作為日誌資訊的內容輸出 計算某個功能的執行時間 用日期命名一個日誌檔案的名稱 記錄或展示某文章的釋出或修改

MySQL查詢,關於日期時間戳,查詢時間的記錄

total rom time logs date_sub 關於 我們 tps times 一. 日期與時間戳數據庫日期寫入大多數用的是時間戳格式,我們在查詢的時候可能不是很方便mysql提供了兩個函數: from_unixtime(time_stamp) ->

mysql的五種日期時間型別【轉載】

[mysql的五種日期和時間型別] mysql(5.5)所支援的日期時間型別有:DATETIME、 TIMESTAMP、DATE、TIME、YEAR。 幾種型別比較如下: 日期時間型別 佔用空間 日期格式 最小值 最大值 零值表示

mysql的五種日期時間類型【轉載】

超出 14. 範圍 包含 最大 但是 header 影響 日期和時間類型 [mysql的五種日期和時間類型] mysql(5.5)所支持的日期時間類型有:DATETIME、 TIMESTAMP、DATE、TIME、YEAR。 幾種類型比較如下: 日期時間類型 占用空間

mysql 日期時間格式轉換實現語句

這裡是一個使用日期函式的例子。下面的查詢選擇了所有記錄,其date_col的值是在最後30天以內: mysql> SELECT something FROM table WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30

c++時間轉換與表示03(與日期時間相關的資料結構)

在標準C/C++中,我們可通過tm結構來獲得日期和時間,tm結構在time.h中的定義如下: #ifndef _TM_DEFINED struct tm { int tm_sec; /* 秒 – 取值區間為[0,59] */ int

mysql日期時間型別

原文有很多錯別字,所以搬過來自己重新編輯了一下. 1、MySQL的五種日期和時間型別   MySQl中有多種表示日期和時間的資料型別。其中YEAR表示年份,DATE表示日期,TIME表示時間,DATETIME和TIMESTAMP表示日期和時間。它們的對比如下: Y