-- 001 NOW(),獲取當前日期和時間的函數。
SELECT NOW()
-- 002 CURDATE,獲取當前的日期
SELECT CURDATE()
-- 003 CURTIME(),獲取當前時間
SELECT CURTIME();
-- 004 DATA() 獲取日期時間或者日期的日期部分
SELECT DATE('2020-04-01 00:11:06')
SELECT DATE('2020-04-01')
SELECT date(now());
-- 005 EXTRACT,獲取返回日期/時間的單獨部分,比如年、月、日、小時、分鐘等等。
-- 語法:EXTRACT(unit FROM date)
-- 注意:取出單獨部分
獲取當前年月
select EXTRACT(YEAR_MONTH FROM now());
select EXTRACT(DAY_HOUR FROM now());
select EXTRACT(DAY_MINUTE FROM now()) AS a;
select EXTRACT(DAY_SECOND FROM now()) AS a;
獲取當前周
SELECT EXTRACT(WEEK FROM NOW())
獲取當前月份
SELECT EXTRACT(MONTH FROM NOW())
SELECT EXTRACT(MONTH FROM '2020-03-01 00:11:06') #探索式,結果成立
SELECT EXTRACT(MONTH FROM '202004') #探索式,結果爲空,無效值 ①
SELECT EXTRACT(MONTH FROM '20200401') #探索式成功 ②
/*
由①②得,日期格式完整性很重要!!!
*/
獲取當前季度
SELECT EXTRACT(QUARTER FROM NOW())
獲取當前日期 + 時間
SELECT EXTRACT(MINUTE_SECOND FROM NOW()) # 理解上有些唐突
SELECT EXTRACT(MINUTE FROM NOW());
SELECT EXTRACT(MONTH FROM NOW());
-- 006 將日期添加指定的時間間隔。
-- 語法:DATE_ADD(date,INTERVAL expr type)
獲取兩週後的時間
select DATE_ADD(now(),INTERVAL 2 WEEK);
-- 007 DATE_SUB:將日期減去指定的時間間隔。
-- 語法:DATE_SUB(date,INTERVAL expr type)
獲取兩天前的時間
SELECT DATE_SUB(NOW(),INTERVAL 2 DAY); --負負得正!!!
SELECT DATE_SUB(NOW(),INTERVAL -2 DAY);
-- OR
select DATE_ADD(now(),INTERVAL -2 DAY);
-- 008 DATEDIFF
-- 獲取兩個日期之間的天數。(只有日期部分參與計算)
-- 語法:DATEDIFF(date1,date2)
-- date1 和 date2 參數是合法的日期或日期/時間表達式。(何謂合法?)
date1 和 date2 參數是合法的日期或日期/時間表達式。
SELECT DATEDIFF(NOW(),'2008-08-08') AS '北京奧運會多天前'
SELECT DATEDIFF(NOW(),'20080808') AS '北京奧運會多天前' # 探索結果成立
SELECT DATEDIFF('20080808',NOW()); -- 最近的日期放前面,否則出現負值;
-- 009 DATE_FORMAT
-- 格式化日期時間
-- 語法:DATE_FORMAT(date,format)
-- date 參數是合法的日期。format 規定日期/時間的輸出格式。
-- 年
SELECT DATE_FORMAT('2019-06-08','%Y') # 返回年,4位
SELECT DATE_FORMAT('2019-06-08','%y') -- 年,2位
SELECT DATE_FORMAT('20190608','%Y') # 探索OK
-- 以一週爲單位
SELECT DATE_FORMAT(now(),'%w') # 返回周的天(0 = 星期日, 6 = 星期六)
SELECT DATE_FORMAT(now(),'%W') # 返回星期名
-- 以年爲單位,表示一年的多少周
-- %V:周 (01-53) 星期日是一週的第一天,與 %X 使用
SELECT DATE_FORMAT(now(),'%V')
SELECT DATE_FORMAT('20200419','%V')
SELECT DATE_FORMAT('20200418','%V')
-- %v:周 (01-53) 星期一是一週的第一天,與 %x 使用
SELECT DATE_FORMAT('20200419','%v')
-- 更多請自主探索;建議根據業務需要做中學;
/*
作者:@zhangjunhong
一文搞定Mysql日期時間函數
https://mp.weixin.qq.com/s/0Y_AjWjgn5KjisWP22RTxg
*/
/*
1.獲取當前時刻時間
1.1返回當前時刻的日期和時間
1.2獲取當前時刻的日期
1.3獲取當前時刻的時間
1.4獲取當前時刻的週數
2.日期時間格式轉換
3.日期時間運算
3.1向後偏移時間
3.2向前偏移時間
3.3兩日期做差
*/
-- 1.獲取當前時刻時間
-- 1.1返回當前時刻的日期和時間
select now() -- 當前時間爲:2020-04-19 21:31:07
-- 1.2獲取當前時刻的日期
SELECT curdate(); -- 獲取當前時刻的日期部分
/*
curdate()函數是直接獲取當前時刻的日期部分,
我們也可以先通過now()函數獲取當前時刻的日期時間,
然後再通過date()函數將日期時間轉化爲日期部分
*/
SELECT date(now()); -- 目的同上;
SELECT YEAR(now()); -- 獲取日期中的年;
SELECT MONTH(now()); -- 獲取日期中的月;
SELECT DAY(now()); -- 只獲取日期中的日;
-- 1.3獲取當前時刻的時間
SELECT curtime(); -- 獲取當前時刻的時間部分
/*
也可以先通過now()函數獲取當前時刻的日期時間,
然後再通過time()函數將日期時間轉化爲時間部分,具體代碼如下:
*/
SELECT time(now()); -- time()函數將日期時間轉化爲時間部分
SELECT HOUR(now()); -- 獲取時間中的小時;
SELECT minute(now()); -- 獲取時間中的分鐘;
SELECT SECOND(now()); -- 獲取時間中的秒;
-- 1.4獲取當前時刻的週數
SELECT WEEKOFYEAR(now());-- 全年的第幾周;
SELECT DAYOFWEEK(now());-- 一週內的周幾:周天對應的是1
-- 2.日期時間格式轉換
select date_format("2019-01-01 22:47:37","%y-%m-%d") -- %Y 對應4位數的年,%y 對應2位數的年
select date_format("2019-01-01 22:47:37","%Y-%m-%d") -- %m 01-12的月
select date_format("2019-01-01 22:47:37","%Y-%c-%d") -- %c 1-12的月
select date_format("2019-01-01 22:47:37","%Y-%M-%d") -- %M 月份對應的英文全稱
select date_format("2019-01-01 22:47:37","%Y-%b-%d") -- %M 月份對應的英文縮寫
select date_format("2019-12-25 22:47:37","%H:%i:%S") -- %H 對應00-23小時
select date_format("2019-12-25 22:47:37","%T") -- %T 返回當前的時分秒 24-小時(hh:mm:ss)
select date_format("2019-12-25 22:47:37","%h:%i:%S") -- %h 對應01-12小時
select date_format("2019-12-25 22:47:37","%h") -- 僅返回日期時間中的"小時"數;
-- extract 用於返回具體日期時間中的單獨部分,比如年、月、日、小時、分鐘等等
-- 具體形式如下:
extract(unit from datetime)
select
extract(year from "2019-12-25 22:47:37") as col1
,extract(month from "2019-12-25 22:47:37") as col2
,extract(week from "2019-12-25 22:47:37") as col3
,extract(day from "2019-12-25 22:47:37") as col4
,extract(hour from "2019-12-25 22:47:37") as col5
,extract(minute from "2019-12-25 22:47:37") as col6
,extract(minute from "2019-12-25 22:47:37") as col7
,extract(second from "2019-12-25 22:47:37") as col8;
-- 3.日期時間運算
/*
有的時候我們也需要對日期之間進行運算,
比如我要獲取今天往前7天對應的日期,
或者今天往後13天對應的日期,可以去翻日曆,也可以去數數,
但是這些方法肯定都不是最直接的方法。
所以需要日期之間的運算。
*/
-- 3.1向後偏移時間
date_add(date,interval x unit) -- date表示當前的日期,或者當前的日期時間;interval是一個固定的參數;
select
"2019-01-01" as col1 -- 初始化時間
,date_add("2019-01-01",interval 7 year) as col2
,date_add("2019-01-01",interval 7 month) as col3
,date_add("2019-01-01",interval 7 day) as col4
select
"2019-01-01 01:01:01" as col1
,date_add("2019-01-01 01:01:01",interval 7 hour) as col2
,date_add("2019-01-01 01:01:01",interval 7 minute) as col3
,date_add("2019-01-01 01:01:01",interval 7 second) as col4;
-- 3.2向前偏移時間
-- date_sub()函數
select
"2019-01-01" as col1
,date_sub("2019-01-01",interval 7 year) as col2
,date_sub("2019-01-01",interval 7 month) as col3
,date_sub("2019-01-01",interval 7 day) as col4
-- 也可繼續使用date_add()函數
-- 通過運行上面的結果與使用date_sub得出來的結果是一致的。
select
"2019-01-01" as col1
,date_add("2019-01-01",interval -7 year) as col2
,date_add("2019-01-01",interval -7 month) as col3
,date_add("2019-01-01",interval -7 day) as col4
-- 3.3兩日期/時間做差
-- 大的日期/時間需要在第一個參數的位置,則返回正數,否則返回負數;
select datediff("2019-01-07","2019-01-01")
select datediff("2019-01-01","2019-01-07") -- 爲負值,最近日期放在前面較妥當;
SELECT timediff('23:23:49','23:09:49');--返回的是時分秒的格式;
-- hayangteacher-常用時間函數
SELECT DAYOFWEEK('2020-04-19 23:09:49');-- 返回date所代表的一星期中的第幾天(1~7),1是星期天,7是星期六;
SELECT weekday('2020-04-19') -- 返回date所代表的一星期中的第幾天(0~6),0是週一,6是星期天;
SELECT DAYOFMONTH('2020-04-19 23:09:49'); -- 返回date是一年中的第幾天(1~31)
SELECT DAYOFYEAR('2020-04-19 23:09:49');-- 返回date是一年的第幾天(1~366)
SELECT DAYNAME('20200419') -- 返回date的星期名
SELECT DAYNAME('2020-04-19 23:09:49') -- 返回date的星期名
SELECT MONTH('20200419') -- 返回統計的月份(1-4)
SELECT MONTHNAME('20200419') -- 返回月份名
SELECT WEEK('20200419') -- 返回日期date爲一年中的第幾周(0~53)
SELECT QUARTER('20200419') -- 返回date所在季度(1~4)
SELECT HOUR('2020-04-19 23:09:49') -- 返回time的小時值(0-23)
SELECT MINUTE('2020-04-19 23:09:49') -- 返回time的分鐘值(0-59)
-- 把字符類型轉換爲時間類型:STR_TO_DATE(str,format)
SELECT str_to_date('2020-04-09','%Y-%m-%d')
SELECT '2020-04-09'; -- 暫且到此
更多閱讀文獻研討:
https://www.cnblogs.com/ggjucheng/p/3352280.html
https://baijiahao.baidu.com/s?id=1608326786755050044&wfr=spider&for=pc
https://mp.weixin.qq.com/s/0Y_AjWjgn5KjisWP22RTxg
附圖1:
date_format(datetime,format)
datetime表示要被轉換的具體的日期時間,format表示要轉換成的格式,可選的格式
附圖2:
extract(unit from datetime)
datetime表示具體的日期時間,unit表示要從datetime中返回的單獨的部分。unit值可以是下列的值: