<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          一文搞定Mysql日期時(shí)間函數(shù)

          共 6174字,需瀏覽 13分鐘

           ·

          2021-04-28 08:34

          日期和時(shí)間函數(shù)部分也是我們?nèi)粘9ぷ髦惺褂妙l率比較高的一部分。這一篇我們主要講講Mysql里面的日期時(shí)間相關(guān)的函數(shù),不同數(shù)據(jù)庫之間基本相同,只會(huì)有個(gè)別函數(shù)的差異。大家掌握一個(gè)數(shù)據(jù)庫的,其他的遇到不會(huì)的,直接查就可以了。

          1.獲取當(dāng)前時(shí)刻時(shí)間
              1.1返回當(dāng)前時(shí)刻的日期和時(shí)間
              1.2獲取當(dāng)前時(shí)刻的日期
              1.3獲取當(dāng)前時(shí)刻的時(shí)間
              1.4獲取當(dāng)前時(shí)刻的周數(shù)
          2.日期時(shí)間格式轉(zhuǎn)換
          3.日期時(shí)間運(yùn)算
              3.1向后偏移時(shí)間
              3.2向前偏移時(shí)間
              3.3兩日期做差

          文章較長,建議先收藏,慢慢讀。

          1.獲取當(dāng)前時(shí)刻時(shí)間

          獲取當(dāng)前時(shí)刻的時(shí)間就是獲取程序運(yùn)行的那一刻與時(shí)間相關(guān)的數(shù)據(jù),比如年月日、時(shí)分秒等信息。

          1.1返回當(dāng)前時(shí)刻的日期和時(shí)間

          返回當(dāng)前時(shí)刻的日期和時(shí)間在ESql中用的是now()函數(shù),直接在select后面寫上now()函數(shù)即可,具體代碼如下:

          select now()

          運(yùn)行上面代碼就會(huì)得到你程序運(yùn)行這一刻所處的年月日、時(shí)分秒的信息,比如:2019-12-25 22:47:37。

          1.2獲取當(dāng)前時(shí)刻的日期

          前面的now()函數(shù)獲取的是當(dāng)前時(shí)刻的日期和時(shí)間,我們有的時(shí)候可能只需要當(dāng)前時(shí)刻的日期部分,并不需要時(shí)間部分,這個(gè)時(shí)候在在Sql中將now()函數(shù)換成curdate()函數(shù),就是獲取當(dāng)前時(shí)刻的日期部分,具體代碼如下:

          select curdate()

          通過運(yùn)行上面的代碼,我們得到了當(dāng)前時(shí)刻的日期部分:2019-12-25

          curdate()函數(shù)是直接獲取當(dāng)前時(shí)刻的日期部分,我們也可以先通過now()函數(shù)獲取當(dāng)前時(shí)刻的日期時(shí)間,然后再通過date()函數(shù)將日期時(shí)間轉(zhuǎn)化為日期部分,具體代碼如下:

          select date(now())

          通過運(yùn)行上面的代碼,會(huì)得到與curdate()函數(shù)相同的結(jié)果。

          我們也可以只獲取日期中的年,使用的是year()函數(shù),具體代碼如下:

          select year(now())

          通過運(yùn)行上面的代碼,最后得到的結(jié)果為2019。

          我們也可以只獲取日期中的月,使用的是month()函數(shù),具體代碼如下:

          select month(now())

          通過運(yùn)行上面的代碼,最后得到的結(jié)果為12。

          我們也可以只獲取日期中的日,使用的是day()函數(shù),具體代碼如下:

          select day(now())

          通過運(yùn)行上面的代碼,最后得到的結(jié)果為25。

          1.3獲取當(dāng)前時(shí)刻的時(shí)間

          我們除了有只獲取當(dāng)前時(shí)刻的日期的需求外,我們還有只獲取當(dāng)前時(shí)刻的時(shí)間需求。如果我們想只獲取當(dāng)前時(shí)刻的時(shí)間,只需要把只獲取當(dāng)前時(shí)刻日期的curdate()函數(shù)換成curtime()函數(shù)即可,具體代碼如下:

          select curtime()

          通過運(yùn)行上面的代碼,就可以獲取當(dāng)前時(shí)刻的時(shí)間部分:22:47:37。

          我們也可以先通過now()函數(shù)獲取當(dāng)前時(shí)刻的日期時(shí)間,然后再通過time()函數(shù)將日期時(shí)間轉(zhuǎn)化為時(shí)間部分,具體代碼如下:

          select time(now())

          通過運(yùn)行上面的代碼,會(huì)得到與curdate()函數(shù)相同的結(jié)果。

          我們也可以只獲取時(shí)間中的小時(shí),使用的是hour()函數(shù),具體代碼如下:

          select hour(now())

          通過運(yùn)行上面的代碼,最后得到的結(jié)果為22。

          我們也可以只獲取時(shí)間中的分鐘,使用的是minute()函數(shù),具體代碼如下:

          select minute(now())

          通過運(yùn)行上面的代碼,最后得到的結(jié)果為47。

          我們也可以只獲取時(shí)間中的秒,使用的是second()函數(shù),具體代碼如下:

          select second(now())

          通過運(yùn)行上面的代碼,最后得到的結(jié)果為37。

          1.4獲取當(dāng)前時(shí)刻的周數(shù)

          上面我們講了如何獲取當(dāng)前時(shí)刻的日期時(shí)間、日期、時(shí)間這三部分。這一節(jié)我們?cè)倏聪氯绾潍@取當(dāng)前時(shí)刻所屬的周數(shù)。我們一般會(huì)將全年分為52周(365天/7),有的時(shí)候也可能是53周,如果我們想看下當(dāng)前時(shí)刻是全年中的第幾周,可以使用weekofyear()函數(shù),具體代碼如下:

          select weekofyear(now())

          通過運(yùn)行上面的代碼,最后得到的結(jié)果為52。

          除了獲取當(dāng)前是全年的第幾周以外,我們還需要獲取當(dāng)天是一周內(nèi)的周幾。在Sql中使用的dayofweek()函數(shù),具體代碼如下:

          select dayofweek(now())

          通過運(yùn)行上面的代碼,最后得到結(jié)果為5,2019年12月25日應(yīng)該是周四哈,為什么結(jié)果是5呢,這是因?yàn)樵摵瘮?shù)中一周是從周日開始的,也就是周日對(duì)應(yīng)的是1,周一對(duì)應(yīng)的是2,以此類推,所以周四對(duì)應(yīng)的是5。

          2.日期時(shí)間格式轉(zhuǎn)換

          我們知道同一個(gè)日期時(shí)間會(huì)有多種不同的表示方式,有的時(shí)候需要在不同格式之間相互轉(zhuǎn)換。在Sql中我們用的是date_format()函數(shù),date_format函數(shù)格式如下:

          date_format(datetime,format)

          datetime表示要被轉(zhuǎn)換的具體的日期時(shí)間,format表示要轉(zhuǎn)換成的格式,可選的格式如下:

          主題格式描述
          %Y4位數(shù)的年
          %b月份對(duì)應(yīng)的英文縮寫
          %M月份對(duì)應(yīng)的英文全稱
          %m01-12的月
          %c1-12的月份數(shù)值
          %d01-31的某月里面的第幾天
          %e1-31的某月里面的第幾天
          %D用th后綴表示某月中的第幾天
          %j001-366的一年中的第幾天
          %a星期幾對(duì)應(yīng)的英文縮寫
          %W星期幾對(duì)應(yīng)的英文全稱
          時(shí)%H00-23的小時(shí)
          時(shí)%h01-12的小時(shí)
          %i00-59的分鐘
          %S秒(00-59)
          %f微秒
          時(shí)分秒%T返回當(dāng)前的時(shí)分秒, 24-小時(shí) (hh:mm:ss)
          select date_format("2019-12-25 22:47:37","%Y-%m-%d")

          通過運(yùn)行上面的代碼,就會(huì)返回4位數(shù)的年、01-12的月、01-31的天,三者之間且用-分隔開來,即2019-12-25。

          這里需要注意下1和01的區(qū)別,本質(zhì)上都是表示的1,但是展示上會(huì)有些不太一樣,比如下面代碼中,我們的原日期是2019-1-1,但是返回的結(jié)果是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")

          通過運(yùn)行上面的代碼就會(huì)返回00-23的小時(shí)、00-59的分、00-59的秒,三者之間用:分隔開來,即22:47:37。

          除了date_format()函數(shù)以外,還有另外一個(gè)函數(shù)extract,用于返回一個(gè)具體日期時(shí)間中的單獨(dú)部分,比如年、月、日、小時(shí)、分鐘等等。具體形式如下:

          extract(unit from datetime)

          datetime表示具體的日期時(shí)間,unit表示要從datetime中返回的單獨(dú)的部分。unit值可以是下列的值:

          unit說明
          year
          month
          day
          hour小時(shí)
          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

          通過運(yùn)行上面的代碼,就會(huì)分別獲取到datetime中的年月日,具體結(jié)果如下:

          col1col2col3
          20191225

          3.日期時(shí)間運(yùn)算

          有的時(shí)候我們也需要對(duì)日期之間進(jìn)行運(yùn)算,比如我要獲取今天往前7天對(duì)應(yīng)的日期,或者今天往后13天對(duì)應(yīng)的日期,可以去翻日歷,也可以去數(shù)數(shù),但是這些方法肯定都不是最直接的方法。所以需要日期之間的運(yùn)算。

          3.1向后偏移時(shí)間

          比如我們要獲取今天之后的x天對(duì)應(yīng)的日期,就是相當(dāng)于在今天日期的基礎(chǔ)上加x天,我們把這叫做向后偏移,這個(gè)時(shí)候就可以使用date_add()函數(shù),具體形式如下:

          date_add(date,interval num unit)

          date表示當(dāng)前的日期,或者當(dāng)前的日期時(shí)間;interval是一個(gè)固定的參數(shù);num為上面講到的x;unit表示你要加的單位,是往后移動(dòng)7天,還是7月,還是7年,可選值與extract函數(shù)中unit的可選值是一樣的。

          select 
              "2019-01-01" as col1
              ,date_add("2019-01-01",interval 7 yearas col2
              ,date_add("2019-01-01",interval 7 monthas col3
              ,date_add("2019-01-01",interval 7 dayas col4

          通過運(yùn)行上面的代碼,就會(huì)返回2019-01-01往后7年、7月、7天對(duì)應(yīng)的日期,具體結(jié)果如下:

          col1col2col3col4
          2019-01-012026-01-012019-08-012019-01-08
          select 
              "2019-01-01 01:01:01" as col1
              ,date_add("2019-01-01 01:01:01",interval 7 houras col2
              ,date_add("2019-01-01 01:01:01",interval 7 minuteas col3
              ,date_add("2019-01-01 01:01:01",interval 7 secondas col4

          通過運(yùn)行上面的代碼,就會(huì)返回2019-01-01 01:01:01往后7小時(shí)、7分鐘、7秒對(duì)應(yīng)的日期,具體結(jié)果如下:

          col1col2col3col4
          2019-01-01 01:01:012019-01-01 08:01:012019-01-01 01:08:012019-01-01 01:01:08

          3.2向前偏移時(shí)間

          有向后偏移,就會(huì)有向前偏移。比如我們要獲取今天之前的若干天,就是相當(dāng)于是在當(dāng)前日期的基礎(chǔ)上減去x天,這個(gè)時(shí)候我們使用的是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 yearas col2
              ,date_sub("2019-01-01",interval 7 monthas col3
              ,date_sub("2019-01-01",interval 7 dayas col4

          通過運(yùn)行上面的代碼,就會(huì)返回2019-01-01往前7年、7月、7天對(duì)應(yīng)的日期,具體結(jié)果如下:

          col1col2col3col4
          2019-01-012012-01-012018-06-012018-12-25

          向前偏移指定的時(shí)間,我們除了使用date_sub以外,我們還可以繼續(xù)使用date_add,只不過把加的具體num值換成負(fù)數(shù)就行,比如7換成-7即可,具體實(shí)現(xiàn)代碼如下:

          select 
              "2019-01-01" as col1
              ,date_add("2019-01-01",interval -7 yearas col2
              ,date_add("2019-01-01",interval -7 monthas col3
              ,date_add("2019-01-01",interval -7 dayas col4

          通過運(yùn)行上面的結(jié)果與使用date_sub得出來的結(jié)果是一致的。

          3.3兩日期做差

          上面講完了向前偏移、向后偏移,我們有的時(shí)候還需要獲取兩日期之差,使用的datediff()函數(shù),datediff用于返回兩日期之間相差的天數(shù),函數(shù)形式如下:

          datediff(end_date,start_date)

          我們是用end_date去減start_date的。

          select datediff("2019-01-07","2019-01-01")

          通過運(yùn)行上面的代碼,會(huì)返回2019-01-07與2019-01-01之間的天數(shù)差,結(jié)果為6。

          點(diǎn)分享
          點(diǎn)收藏
          點(diǎn)點(diǎn)贊
          點(diǎn)在看
          瀏覽 37
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  香蕉偷拍视频 | 玖玖精品在线 | 夏夏粉嫩黑鲍鱼大胆尤物P | 人人操国产高清使劲操91 | 国产操逼电影 |