MySql時間處理函數的學習與實踐

前言

平常業務開發中,咱們常常須要跟SQl的日期打交道,好比查詢最近30天的訂單,查詢某一個月的訂單量,統計某天每小時的下單量等等,因而整理了如下MySql時間處理函數。html

DATE_ADD()

定義: 向日期添加指定的時間間隔。mysql

語法格式:sql

DATE_ADD(date,INTERVAL expr unit)
複製代碼

demo:bash

mysql> SELECT DATE_ADD('2018-05-01',INTERVAL 1 DAY);
        -> '2018-05-02'

//若是你查最近七天內的訂單,能夠這樣:
mysql> SELECT * FROM `order` WHERE OrderDate>=DATE_ADD(NOW(),INTERVAL -7 DAY);
複製代碼

DATE_SUB()

定義: 從日期減去指定的時間間隔。函數

語法格式:學習

DATE_SUB(date,INTERVAL expr unit)
複製代碼

demo:ui

SELECT DATE_SUB('2018-05-01',INTERVAL 1 YEAR);
        -> '2017-05-01'
//若是你查最近七天內的訂單,能夠這樣:
select * from `order` where OrderDate>=DATE_SUB(NOW(),INTERVAL 7 DAY);
複製代碼

DATEDIFF()

定義: 返回兩個日期之間的天數spa

語法格式:code

DATEDIFF(expr1,expr2)
複製代碼

demo:orm

mysql> SELECT DATEDIFF('2007-12-31 23:59:59','2007-12-30');
        -> 1
mysql> SELECT DATEDIFF('2010-11-30 23:59:59','2010-12-31');
        -> -31
//若是你查最近30天內的訂單,能夠這樣:
select * from `order` where DATEDIFF(NOW(),OrderDate)<=30;
複製代碼

DAYOFWEEK()

定義: 表示返回日期是星期幾,記住:星期天=1,星期一=2, ... 星期六=7

語法格式:

DAYOFWEEK(date)
複製代碼

demo:

mysql> SELECT DAYOFWEEK('2007-02-03');
        -> 7
//查詢星期六下的訂單
mysql> SELECT * FROM `order` WHERE DAYOFWEEK(OrderDate) =7;
複製代碼

MONTH()

定義: 返回date是當年的第幾月,1月就返回1,... ,12月就返回12

語法格式:

MONTH(date)
複製代碼

demo:

mysql> SELECT MONTH('2019-11-24');
      -> 11
//查看今年11月份下的訂單
SELECT * FROM `order` WHERE OrderDate>= '2019-01-01' and MONTH(OrderDate) =11 ;
複製代碼

YEAR()

定義: 返回date是年份,從1000到9999.

語法格式:

YEAR(date)
複製代碼

demo:

mysql> SELECT YEAR('1987-01-01');
        -> 1987
// 查看2018年下的訂單總數
SELECT count(*) FROM `order` WHERE Year(OrderDate) =2018 ;
複製代碼

HOUR()

定義: 返回該date或者time的hour值,值範圍(0-23).

語法格式:

HOUR(time)
複製代碼

demo:

mysql> SELECT HOUR('10:05:03');
        -> 10
// 查看2019年雙11,0點下單量
SELECT count(*) FROM `order` WHERE  OrderDate BETWEEN '2019-11-11' and '2019-11-12' and HOUR(OrderDate) =0 ;
複製代碼

DATE_FORMAT()

定義: 用於以不一樣的格式顯示日期/時間數據。。

語法格式:

DATE_FORMAT(date,format)
複製代碼

date爲對應的日期,fromat爲輸出格式。format的格式以下:

格式 描述
%a 縮寫星期名
%b 縮寫月名
%c 月,數值
%D 帶有英文前綴的月中的天
%d 月的天,數值(00-31)
%e 月的天,數值(0-31)
%f 微秒
%H 小時 (00-23)
%h 小時 (01-12)
%i 分鐘,數值(00-59)
%j 年的天 (001-366)
%M 月名
%m 月,數值(00-12)
%S 秒(00-59)
%T 時間, 24-小時 (hh:mm:ss)
%W 星期名
%Y 年,4 位

demo:

mysql> SELECT DATE_FORMAT('2009-10-04 22:23:00', '%W %M %Y');
        -> 'Sunday October 2009'
mysql> SELECT DATE_FORMAT('2007-10-04 22:23:00', '%H:%i:%s');
        -> '22:23:00'
// 統計2019年11月23號,每小時的下單量
select hour(OrderDate) as hour,count(*) as counts from `order` where
DATE_FORMAT(OrderDate,'%Y-%m-%d') = '2019-11-23'  group by hour(OrderDate); 
複製代碼

EXTRACT()

定義: 用於返回日期/時間的單獨部分,好比年、月、日、小時、分鐘等等。

語法格式:

EXTRACT(unit FROM date)
複製代碼

date 參數是合法的日期表達式。unit 參數能夠是下列的值:

Unit值
SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
YEAR
...

demo:

mysql> SELECT EXTRACT(YEAR FROM '2019-07-02');
        -> 2019
mysql> SELECT EXTRACT(YEAR_MONTH FROM '2019-07-02 01:02:03');
        -> 201907
mysql> SELECT EXTRACT(DAY_MINUTE FROM '2019-07-02 01:02:03');
        -> 20102

//查詢訂單的年月日
mysql>SELECT EXTRACT(YEAR FROM OrderDate) AS OrderYear,
     ->EXTRACT(MONTH FROM OrderDate) AS OrderMonth,
     ->EXTRACT(DAY FROM OrderDate) AS OrderDay
     ->FROM `order`
複製代碼

NOW(),CURDATE(),CURTIME()

定義:

  • NOW()返回當前的日期和時間
  • CURDATE() 返回當前的日期
  • CURTIME() 返回當前的時間

語法格式:

NOW()
CURDATE()
CURTIME()
複製代碼

demo:

DATE(),DAY(), TIME()

定義:

  • DATE() 提取日期或日期/時間表達式的日期部分
  • DAY() 返回當月的幾號 (1-31)
  • TIME() 提取日期或日期/時間表達式的時間部分

語法格式:

DATE(expr)
DAY(date)
TIME(expr)
複製代碼

demo:

mysql> SELECT DATE('2003-12-31 01:02:03');
        -> '2003-12-31'
mysql> select day('2017-02-03');
     ->3
mysql>  SELECT TIME('2003-12-31 01:02:03');
        -> '01:02:03'
mysql> SELECT TIME('2003-12-31 01:02:03.000123');
        -> '01:02:03.000123'
複製代碼

參考與感謝

我的公衆號

  • 若是你是個愛學習的好孩子,能夠關注我公衆號,一塊兒學習討論。
  • 若是你以爲本文有哪些不正確的地方,能夠評論,也能夠關注我公衆號,私聊我,你們一塊兒學習進步哈。
相關文章
相關標籤/搜索