SQL乾貨:Mysql日期時間函數

2021-02-19 愛數據原統計網

日期和時間函數部分也是我們日常工作中使用頻率比較高的一部分。這一篇我們主要講講Mysql裡面的日期時間相關的函數,不同資料庫之間基本相同,只會有個別函數的差異。大家掌握一個資料庫的,其他的遇到不會的,直接查就可以了。

獲取當前時刻的時間就是獲取程序運行的那一刻與時間相關的數據,比如年月日、時分秒等信息。

1.1返回當前時刻的日期和時間

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

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


1.2獲取當前時刻的日期

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

通過運行上面的代碼,我們得到了當前時刻的日期部分:2019-12-25

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

通過運行上面的代碼,會得到與curdate()函數相同的結果。

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

通過運行上面的代碼,最後得到的結果為2019。

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

通過運行上面的代碼,最後得到的結果為12。

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

通過運行上面的代碼,最後得到的結果為25。

1.3獲取當前時刻的時間

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

通過運行上面的代碼,就可以獲取當前時刻的時間部分:22:47:37。

我們也可以先通過now()函數獲取當前時刻的日期時間,然後再通過time()函數將日期時間轉化為時間部分,具體代碼如下:

通過運行上面的代碼,會得到與curdate()函數相同的結果。

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

通過運行上面的代碼,最後得到的結果為22。

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

通過運行上面的代碼,最後得到的結果為47。

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

通過運行上面的代碼,最後得到的結果為37。

1.4獲取當前時刻的周數

上面我們講了如何獲取當前時刻的日期時間、日期、時間這三部分。這一節我們再看下如何獲取當前時刻所屬的周數。我們一般會將全年分為52周(365天/7),有的時候也可能是53周,如果我們想看下當前時刻是全年中的第幾周,可以使用weekofyear()函數,具體代碼如下:

通過運行上面的代碼,最後得到的結果為52。

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

通過運行上面的代碼,最後得到結果為5,2019年12月25日應該是周四哈,為什麼結果是5呢,這是因為該函數中一周是從周日開始的,也就是周日對應的是1,周一對應的是2,以此類推,所以周四對應的是5。

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

date_format(datetime,format)

datetime表示要被轉換的具體的日期時間,format表示要轉換成的格式,可選的格式如下:

主題
格式
描述

%Y

4位數的年

%b

月份對應的英文縮寫

%M

月份對應的英文全稱

%m

01-12的月

%c

1-12的月份數值

%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位數的年、01-12的月、01-31的天,三者之間且用-分隔開來,即2019-12-25。

這裡需要注意下1和01的區別,本質上都是表示的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()函數以外,還有另外一個函數extract,用於返回一個具體日期時間中的單獨部分,比如年、月、日、小時、分鐘等等。具體形式如下:

extract(unit from datetime)

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

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中的年月日,具體結果如下:

有的時候我們也需要對日期之間進行運算,比如我要獲取今天往前7天對應的日期,或者今天往後13天對應的日期,可以去翻日曆,也可以去數數,但是這些方法肯定都不是最直接的方法。所以需要日期之間的運算。

3.1向後偏移時間

比如我們要獲取今天之後的x天對應的日期,就是相當於在今天日期的基礎上加x天,我們把這叫做向後偏移,這個時候就可以使用date_add()函數,具體形式如下:

date_add(date,interval num unit)

date表示當前的日期,或者當前的日期時間;interval是一個固定的參數;num為上面講到的x;unit表示你要加的單位,是往後移動7天,還是7月,還是7年,可選值與extract函數中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天對應的日期,具體結果如下:

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秒對應的日期,具體結果如下:

3.2向前偏移時間

有向後偏移,就會有向前偏移。比如我們要獲取今天之前的若干天,就是相當於是在當前日期的基礎上減去x天,這個時候我們使用的是date_sub()函數,date_sub與date_add的函數形式是一樣的。把上面代碼中的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天對應的日期,具體結果如下:

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

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()函數,datediff用於返回兩日期之間相差的天數,函數形式如下:

datediff(end_date,start_date)

我們是用end_date去減start_date的。

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

通過運行上面的代碼,會返回2019-01-07與2019-01-01之間的天數差,結果為6。

1500+招聘網站數據

記得掃碼關注 領取

相關焦點

  • mysql UNIX時間戳與日期的相互轉換
    UNIX時間戳轉換為日期用函數: FROM_UNIXTIME() selectFROM_UNIXTIME(1156219870); 日期轉換為UNIX時間戳用函數: UNIX_TIMESTAMP()
  • MySQL那些與日期和時間相關的函數
    【IT168 技術】日期函數可能是比較常使用的一種函數。下面介紹一些最為常用的日期函數及一些容易忽略的問題。  1. NOW、CURRENT_TIMESTAMP和SYSDATE  這些函數都能返回當前的系統時間,它們之間有區別嗎?先來看個例子。
  • mysql常用函數大全
    字符串函數1.字符串連接CONCATSELECT CONCAT('my','sql')2.字符串替換函數insertSELECTINSERT('hi,mysql',4,5,'sql server')3.字符串轉小寫lowerSELECT LOWER('MySql')4.字符串轉大寫upperSELECT UPPER('layui')
  • MySQL 函數相關
    在以下格式的函數中可以對pos 使用一個負值。('Sakila', -5, 3);            -> 'aki'        mysql> SELECT SUBSTRING('Sakila' FROM -4 FOR 2);            -> 'ki'四、日期和時間函數    CURDATE()或CURRENT_DATE() 返回當前的日期
  • mysql_data_seek函數詳解
    定義和用法mysql_data_seek()函數的作用是:移動內部結果(行)的指針內部的行指針[internal row pointer]是指:通過mysql_query()函數返回的當前結果所處的行的位置。
  • mysql常用sql語句總結
    Int(4byte,0-2^32-1)屬性:Unsigned,zerofill,M字符串:char、varchar、text、bolb(字符串當二進位看)日期時間類型:時間戳: timestampZerofill屬性默認決定列為unsigned; 列的默認值1.NULL查詢不便2.NULL索引效果不高;
  • MySQL sql_mode 說明(及處理一起 sql_mode 引發的問題)
    無獨有偶,在 stackoverflow上找到同樣的問題 how-to-make-sql-mode-no-engine-substitution-permanent-in-mysql-my-cnf ,原因很簡單,sql_mode這個選項被其它地方的配置覆蓋了。
  • mysql基礎-mysql中的DQL-常見函數
    每天和小潭一起快樂的學習~    你好,我是在學mysql鑑於篇幅原因,小潭將mysql查詢部分的知識點分成同期不同篇的方式進行學習和介紹。該篇中我們將了解mysql中的常見函數。sql語句選中使用F9可快速提交查詢,使用F12可以格式化sql語句。
  • Myql SLEEP函數和SQL注入
    本文蟲蟲就和大家以sleep()函數為介入來討論。SLEEP()函數SLEEP(n),暫停資料庫n秒。不要混淆MySQL控制臺中的sleep狀態,它描述了連接的狀態,SLEEP()函數做了一件事,就是暫停資料庫的執行,直到設定的時間。那麼該操作有什麼用?為什麼要用它呢?
  • MySQL中插入datetime時的PHP date()格式
    日期只能存儲此類型,但它可以與許多時間格式函數一起使用來更改並顯示它。當使用PHP在MySQL中編寫查詢時,它的適用性將基於MySQL本身進行檢查。所以使用MySQL提供的默認日期和時間格式,即'YYYY-MM-DD'例子:ATE: YYYY-MM-DDExample: 2019-01-28 DATETIME: YYYY-MM-DD HH:MI:SSExample: 2019-01-28 23:50:30 TIMESTAMP: YYYY-MM-DD
  • MySQL技術內幕:時間和日期數據類型
    【IT168 技術】MySQL資料庫中有五種與日期和時間有關的數據類型,各種日期數據類型所佔空間如表2-1所示。  DATETIME和 DATE  DATETIME佔用8位元組,是佔用空間最多的一種日期類型。它既顯示了日期,同時也顯示了時間。
  • MySQL常用函數介紹
    CURDATE 和 CURRENT_DATE   兩個函數作用相同,返回當前系統的日期值CURTIME 和 CURRENT_TIME   兩個函數作用相同,返回當前系統的時間值NOW 和 SYSDATE   兩個函數作用相同,返回當前系統的日期和時間值UNIX_TIMESTAMP   獲取UNIX時間戳函數,返回一個以 UNIX 時間戳為基礎的無符號整數
  • MYSQL 常用函數
    > select mod(10,3);+-+| mod(10,3) |+-+|         1 |+-+1 row in set (0.00 sec)日期和時間函數函數功能CURDATE()獲取當前日期CURTIME()獲取當前時間NOW()獲取當前的日期和時間WEEK(date)返回日期date為一年中的第幾周YEAR(date)返回日期date的年份HOUR(time)返回時間time的小時值MINUTE(time
  • Flask Web 小項目——SQL 建表語句生成器
    >col_info = sql_col_info[i]if col_info['dtype'] == 'string':mysql_text += '{col} varchar(40) comment "{comment}",\n'.format(**col_info)else:mysql_text
  • 考前複習必備MySQL資料庫(關係型資料庫管理系統)
    函數格式如下:mysqli_function(value,value,...)$conn ){ die('連接失敗: ' . mysqli_error($conn));}echo '連接成功';mysqli_select_db($conn, 'web' );mysqli_close($conn);?>MySQL 數據類型mysql支持多種類型,分三類:數值;日期/時間;字符串類型。
  • MySQL中與日期與時間相關的函數
    下面這張圖片,是我們每個人拿起手機就應該看到的,這就是日期與時間!MySQL中如何通過各種函數來實現日期與時間的處理?這就是本文所要探索的問題!【1】獲取當前日期的函數【結論】返回值是以「年月日」的方式展現。
  • mysql 時間函數用法 集合 - 軟體與服務 - 中國軟體網-推動ICT產業...
    對於每個類型擁有的值範圍以及並且指定日期何時間值的有效格式的描述見7.3.6 日期和時間類型。這裡是一個使用日期函數的例子。(見例子)date是一個指定開始日期的DATETIME或DATE值,expr是指定加到開始日期或從開始日期減去的間隔值一個表達式,expr是一個字符串;它可以以一個「-」開始表示負間隔。type是一個關鍵詞,指明表達式應該如何被解釋。EXTRACT(type FROM date)函數從日期中返回「type」間隔。
  • MySQL常用的函數
    微信公眾號:PHP在線在使用MySQL的時候,靈活運用函數可以提高開發效率,方便解決一些棘手的問題。本文講解的MySQL常用函數包括常用的字符串函數、數值函數、日期和時間函數、聚合函數等。-+1 row in set (0.00 sec)SIGN (number2 ) //函數返回參數的符號3.MySQL日期時間類ADDTIME (date2 ,time_interval ) //將time_interval加到date2CONVERT_TZ (datetime2 ,fromTZ ,toTZ ) //轉換時區CURRENT_DATE
  • 中間件mysql-proxy的一些細節
    connect_server()mysql-client向proxy發起連接時,proxy會調用這個函數。用戶可以實現該函數,來做一些負載均衡的事情,例如選擇將要連向那個mysql-server。假設有多個mysql-server後端,而用戶又沒有實現這個函數,proxy默認採用輪詢(round-robin)策略。
  • 關於mysql中運算符與函數的概述
    運算符是告訴mysql執行特定的算術或邏輯操作的符號,運算符連接著各個表達式中的操作數,其作用是用來指明對操作數進行的運算。mysql字符函數:1.字符串連接函數:2.字符中轉換大小寫函數:3.求字符串長度的函數:4.刪除空格函數:5.截取字符串:6.獲取指定長度的字符串函數: