一篇文章搞定Mysql日期時間函數(shù)
前言
日期和時間函數(shù)部分也是我們?nèi)粘9ぷ髦惺褂妙l率比較高的一部分。這一篇我們主要講講Mysql里面的日期時間相關的函數(shù),不同數(shù)據(jù)庫之間基本相同,只會有個別函數(shù)的差異。大家掌握一個數(shù)據(jù)庫的,其他的遇到不會的,直接查就可以了。
1.獲取當前時刻時間
1.1返回當前時刻的日期和時間
1.2獲取當前時刻的日期
1.3獲取當前時刻的時間
1.4獲取當前時刻的周數(shù)
2.日期時間格式轉換
3.日期時間運算
3.1向后偏移時間
3.2向前偏移時間
3.3兩日期做差
文章較長,建議先收藏,慢慢讀。
1.獲取當前時刻時間
獲取當前時刻的時間就是獲取程序運行的那一刻與時間相關的數(shù)據(jù),比如年月日、時分秒等信息。
1.1返回當前時刻的日期和時間
返回當前時刻的日期和時間在ESql中用的是now()函數(shù),直接在select后面寫上now()函數(shù)即可,具體代碼如下:
select now()
運行上面代碼就會得到你程序運行這一刻所處的年月日、時分秒的信息,比如:2019-12-25 22:47:37。
1.2獲取當前時刻的日期
前面的now()函數(shù)獲取的是當前時刻的日期和時間,我們有的時候可能只需要當前時刻的日期部分,并不需要時間部分,這個時候在在Sql中將now()函數(shù)換成curdate()函數(shù),就是獲取當前時刻的日期部分,具體代碼如下:
select curdate()
通過運行上面的代碼,我們得到了當前時刻的日期部分:2019-12-25
curdate()函數(shù)是直接獲取當前時刻的日期部分,我們也可以先通過now()函數(shù)獲取當前時刻的日期時間,然后再通過date()函數(shù)將日期時間轉化為日期部分,具體代碼如下:
select date(now())
通過運行上面的代碼,會得到與curdate()函數(shù)相同的結果。
我們也可以只獲取日期中的年,使用的是year()函數(shù),具體代碼如下:
select year(now())
通過運行上面的代碼,最后得到的結果為2019。
我們也可以只獲取日期中的月,使用的是month()函數(shù),具體代碼如下:
select month(now())
通過運行上面的代碼,最后得到的結果為12。
我們也可以只獲取日期中的日,使用的是day()函數(shù),具體代碼如下:
select day(now())
通過運行上面的代碼,最后得到的結果為25。
1.3獲取當前時刻的時間
我們除了有只獲取當前時刻的日期的需求外,我們還有只獲取當前時刻的時間需求。如果我們想只獲取當前時刻的時間,只需要把只獲取當前時刻日期的curdate()函數(shù)換成curtime()函數(shù)即可,具體代碼如下:
select curtime()
通過運行上面的代碼,就可以獲取當前時刻的時間部分:22:47:37。
我們也可以先通過now()函數(shù)獲取當前時刻的日期時間,然后再通過time()函數(shù)將日期時間轉化為時間部分,具體代碼如下:
select time(now())
通過運行上面的代碼,會得到與curdate()函數(shù)相同的結果。
我們也可以只獲取時間中的小時,使用的是hour()函數(shù),具體代碼如下:
select hour(now())
通過運行上面的代碼,最后得到的結果為22。
我們也可以只獲取時間中的分鐘,使用的是minute()函數(shù),具體代碼如下:
select minute(now())
通過運行上面的代碼,最后得到的結果為47。
我們也可以只獲取時間中的秒,使用的是second()函數(shù),具體代碼如下:
select second(now())
通過運行上面的代碼,最后得到的結果為37。
1.4獲取當前時刻的周數(shù)
上面我們講了如何獲取當前時刻的日期時間、日期、時間這三部分。這一節(jié)我們再看下如何獲取當前時刻所屬的周數(shù)。我們一般會將全年分為52周(365天/7),有的時候也可能是53周,如果我們想看下當前時刻是全年中的第幾周,可以使用weekofyear()函數(shù),具體代碼如下:
select weekofyear(now())
通過運行上面的代碼,最后得到的結果為52。
除了獲取當前是全年的第幾周以外,我們還需要獲取當天是一周內(nèi)的周幾。在Sql中使用的dayofweek()函數(shù),具體代碼如下:
select dayofweek(now())
通過運行上面的代碼,最后得到結果為5,2019年12月25日應該是周四哈,為什么結果是5呢,這是因為該函數(shù)中一周是從周日開始的,也就是周日對應的是1,周一對應的是2,以此類推,所以周四對應的是5。
2.日期時間格式轉換
我們知道同一個日期時間會有多種不同的表示方式,有的時候需要在不同格式之間相互轉換。在Sql中我們用的是date_format()函數(shù),date_format函數(shù)格式如下:
date_format(datetime,format)
datetime表示要被轉換的具體的日期時間,format表示要轉換成的格式,可選的格式如下:
主題 |
格式 |
描述 |
---|---|---|
年 |
%Y |
4位數(shù)的年 |
月 |
%b |
月份對應的英文縮寫 |
月 |
%M |
月份對應的英文全稱 |
月 |
%m |
01-12的月 |
月 |
%c |
1-12的月份數(shù)值 |
日 |
%d |
01-31的某月里面的第幾天 |
日 |
%e |
1-31的某月里面的第幾天 |
日 |
%D |
用th后綴表示某月中的第幾天 |
日 |
%j |
001-366的一年中的第幾天 |
周 |
%a |
星期幾對應的英文縮寫 |
周 |
%W |
星期幾對應的英文全稱 |
時 |
%H |
00-23的小時 |
時 |
%h |
01-12的小時 |
分 |
%i |
00-59的分鐘 |
秒 |
%S |
秒(00-59) |
秒 |
%f |
微秒 |
時分秒 |
%T |
返回當前的時分秒, 24-小時 (hh:mm:ss) |
select date_format("2019-12-25 22:47:37","%Y-%m-%d")
通過運行上面的代碼,就會返回4位數(shù)的年、01-12的月、01-31的天,三者之間且用-分隔開來,即2019-12-25。
這里需要注意下1和01的區(qū)別,本質(zhì)上都是表示的1,但是展示上會有些不太一樣,比如下面代碼中,我們的原日期是2019-1-1,但是返回的結果是2019-01-01的。
select date_format("2019-1-1 22:47:37","%Y-%m-%d") select date_format("2019-12-25 22:47:37","%H:%i:%S")
通過運行上面的代碼就會返回00-23的小時、00-59的分、00-59的秒,三者之間用:分隔開來,即22:47:37。
除了date_format()函數(shù)以外,還有另外一個函數(shù)extract,用于返回一個具體日期時間中的單獨部分,比如年、月、日、小時、分鐘等等。具體形式如下:
extract(unit from datetime)
datetime表示具體的日期時間,unit表示要從datetime中返回的單獨的部分。unit值可以是下列的值:
unit |
說明 |
---|---|
year |
年 |
month |
月 |
day |
日 |
hour |
小時 |
minute |
分鐘 |
second |
秒 |
week |
周數(shù),全年第幾周 |
select extract(year from "2019-12-25 22:47:37") as col1 ,extract(month from "2019-12-25 22:47:37") as col2 ,extract(day from "2019-12-25 22:47:37") as col3
通過運行上面的代碼,就會分別獲取到datetime中的年月日,具體結果如下:
col1 |
col2 |
col3 |
---|---|---|
2019 |
12 |
25 |
3.日期時間運算
有的時候我們也需要對日期之間進行運算,比如我要獲取今天往前7天對應的日期,或者今天往后13天對應的日期,可以去翻日歷,也可以去數(shù)數(shù),但是這些方法肯定都不是最直接的方法。所以需要日期之間的運算。
3.1向后偏移時間
比如我們要獲取今天之后的x天對應的日期,就是相當于在今天日期的基礎上加x天,我們把這叫做向后偏移,這個時候就可以使用date_add()函數(shù),具體形式如下:
date_add(date,interval num unit)
date表示當前的日期,或者當前的日期時間;interval是一個固定的參數(shù);num為上面講到的x;unit表示你要加的單位,是往后移動7天,還是7月,還是7年,可選值與extract函數(shù)中unit的可選值是一樣的。
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
通過運行上面的代碼,就會返回2019-01-01往后7年、7月、7天對應的日期,具體結果如下:
col1 |
col2 |
col3 |
col4 |
---|---|---|---|
2019-01-01 |
2026-01-01 |
2019-08-01 |
2019-01-08 |
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
通過運行上面的代碼,就會返回2019-01-01 01:01:01往后7小時、7分鐘、7秒對應的日期,具體結果如下:
col1 |
col2 |
col3 |
col4 |
---|---|---|---|
2019-01-01 01:01:01 |
2019-01-01 08:01:01 |
2019-01-01 01:08:01 |
2019-01-01 01:01:08 |
3.2向前偏移時間
有向后偏移,就會有向前偏移。比如我們要獲取今天之前的若干天,就是相當于是在當前日期的基礎上減去x天,這個時候我們使用的是date_sub()函數(shù),date_sub與date_add的函數(shù)形式是一樣的。把上面代碼中的date_add換成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
通過運行上面的代碼,就會返回2019-01-01往前7年、7月、7天對應的日期,具體結果如下:
col1 |
col2 |
col3 |
col4 |
---|---|---|---|
2019-01-01 |
2012-01-01 |
2018-06-01 |
2018-12-25 |
向前偏移指定的時間,我們除了使用date_sub以外,我們還可以繼續(xù)使用date_add,只不過把加的具體num值換成負數(shù)就行,比如7換成-7即可,具體實現(xiàn)代碼如下:
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
通過運行上面的結果與使用date_sub得出來的結果是一致的。
3.3兩日期做差
上面講完了向前偏移、向后偏移,我們有的時候還需要獲取兩日期之差,使用的datediff()函數(shù),datediff用于返回兩日期之間相差的天數(shù),函數(shù)形式如下:
datediff(end_date,start_date)
我們是用end_date去減start_date的。
select datediff("2019-01-07","2019-01-01")
通過運行上面的代碼,會返回2019-01-07與2019-01-01之間的天數(shù)差,結果為6。
你還可以看:
到此這篇關于Mysql日期時間函數(shù)的文章就介紹到這了,更多相關Mysql日期時間函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
MySQL配置文件my.cnf參數(shù)優(yōu)化和中文詳解
這篇文章主要介紹了MySQL配置文件my.cnf參數(shù)優(yōu)化和中文詳解,非常詳細的用中文注釋了各個參數(shù)的作用以及建議值,需要的朋友可以參考下2014-03-03Windows10下mysql 5.7.21 Installer版安裝圖文教程
這篇文章主要為大家詳細介紹了Windows10下mysql 5.7.21 Installer版安裝圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-09-09MySQL安裝與創(chuàng)建用戶操作(新手入門指南)
這篇文章主要為大家介紹了MySQL安裝與創(chuàng)建用戶的使用講解是非常適合小白新手的入門學習,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-05-05MySQL之FIELD()與ORDER BY()相結合實現(xiàn)對結果的自定義排序方式
這篇文章主要介紹了MySQL之FIELD()與ORDER BY()相結合實現(xiàn)對結果的自定義排序方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-04-04mysql創(chuàng)建表設置表主鍵id從1開始自增的解決方案
在MySQL中用很多類型的自增ID,每個自增ID都設置了初始值,一般情況下初始值都是從0開始,然后按照一定的步長增加(一般是自增 1),下面這篇文章主要給大家介紹了關于mysql創(chuàng)建表設置表主鍵id從1開始自增的解決方案,需要的朋友可以參考下2023-04-04