日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

处理时间_7_60个Mysql日期时间函数汇总

發布時間:2024/9/27 数据库 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 处理时间_7_60个Mysql日期时间函数汇总 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ? ? ? ? ? ? ? ? ? ? ? Mysql日期時間函數使用大全

需求描述

需求:列出mysql常見的日期、時間函數的使用方法以及注意事項。

解決方法:通過參考官方手冊并驗證來完成該需求。

:1 當前以mysql來演示。

? ? ?2 詳細函數使用方法及說明見SQL代碼注釋或者表格匯總。

SQL代碼

時間加減

對日期時間類型進行指定單位的加減操作,計算后仍是時間。

-- 1 時間加減運算(對日期時間類型進行指定單位的加減操作,計算后仍是時間) SELECT ADDDATE('2008-01-02', INTERVAL 31 DAY) -- 日期加減,這里單位是天。 ,ADDTIME('2007-12-31 23:59:59.999999', '1 1:1:1.000002') -- 日期時間加減 ,DATE_ADD('1998-01-02', INTERVAL -31 DAY),DATE_ADD('2100-12-31 23:59:59',INTERVAL '1:1' MINUTE_SECOND) -- 時間加減 ,DATE_SUB('1998-01-02', INTERVAL 31 DAY) -- 時間加減 ,SUBDATE('2008-01-02', INTERVAL -31 DAY) -- DATE_SUB的同義詞 ,SUBTIME('2007-12-31 23:59:59.999999','1 1:1:1.000002') -- 兩個時間相加減 ,TIMESTAMPADD(MINUTE,1,'2003-01-02') -- 時間加減 ,TIMESTAMP('2003-12-31'),TIMESTAMP('2003-12-31 12:00:00','12:00:00') -- 1個參數時返回含全是0的時分秒時間;2個參數時返回兩個時間的加

提取時間

從日期時間里提取年、季度、月(份)、周(名)、年所在周、月最后日、日、時、分、秒、微秒。 -- 2 時間提取(從日期時間里提取年、季度、月(份)、周(名)、年所在周、月最后日、日、時、分、秒、微秒) SELECT DATE('2003-12-31 01:02:03') -- 提取日期時間里的日期 ,EXTRACT(YEAR FROM '2019-07-02') -- 從日期里提取年月日時分秒 ,TIME('2003-12-31 01:02:03') -- 返回日期時間里的時間 ,YEAR('2021-04-09') -- 返回年 ,QUARTER('2008-04-01') -- 返回日期所在的季度 ,PERIOD_ADD(200801,2) -- 返日期的月份加減 ,MONTH('2008-02-03') -- 返回日期的月份(數字形式) ,MONTHNAME('2008-02-03') -- 返回日期的月份名 ,WEEK('2021-04-09') -- 年所在周,一般一年有53周 ,WEEKDAY('2021-04-09') -- 周工作日序號,0周一, 1星期二, … 6星期天 ,WEEKOFYEAR('2021-04-09') -- 返回年所在周,同week() ,YEARWEEK('2021-04-09') -- 返回年和年所在周 ,DAY('2021-04-08') -- 同DAYNAME ,DAYNAME('2021-04-08') -- 周所在星期數,與lc_time_names有關,中文顯示"星期四" ,DAYOFMONTH('2021-04-08') -- 月里對應的日期 ,DAYOFWEEK('2021-04-08') -- 1 是星期天 2 是星期1依次類推 ,DAYOFYEAR('2021-04-08') -- 日期所在年的天數 ,HOUR('10:05:03') -- 提取時間里的小時 ,LAST_DAY('2021-02-05')-- 返回日期所在月的最后一天 ,MINUTE('2008-02-03 10:05:03') -- 返回時間的分鐘 ,SECOND('10:05:03') -- 返回秒數 ,MICROSECOND('12:00:00.123456')-- 返回時間的微秒

時間格式化

對日期時間、字符串類型按照指定的日期或時間格式進行轉換。 -- 3 時間格式化(對日期時間、字符串類型按照指定的日期或時間格式進行轉換) SELECT DATE_FORMAT('2003-10-03',GET_FORMAT(DATE,'USA')) -- 返回一個格式化的日期字符串 ,DATE_FORMAT('2009-10-04 22:23:00', '%Y %m %d') -- 時間格式化 ,STR_TO_DATE('01,5,2013','%d,%m,%Y') -- 字符串按指定格式轉為時間 ,TIME_FORMAT('100:00:00', '%H %k %h %I %l') -- 時間格式化,時間大于23時,%h %I %l返回除12后的模

生成時間間隔

比較兩個時間,生成時間指定單位的時間差,結果是整型數。

-- 4 生成時間間隔(比較兩個時間,生成時間指定單位的時間差,結果是整型數) SELECT TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01') -- 指定單位的時間差 ,UNIX_TIMESTAMP('1970-01-01 10:00:02')-- 返回Unix時間差,計算方法:(10-8)*3600+2 = 7202 比較時間時以UTC時間為基準,如果當前時間是東8區則要減去8換算成UTC時間 ,TIME_TO_SEC('00:39:38') -- 將時間轉換為對應的秒數,與SEC_TO_TIME()對應 ,TIMEDIFF('2008-12-31 23:59:59.000001','2008-12-30 01:01:01.000002') -- 時間差 ,DATEDIFF('2007-12-31 23:59:59','2007-12-29') -- 兩個時間差 ,PERIOD_DIFF(200802,200703) -- 返回兩個日期的月份差 ,TO_DAYS(950501) -- 距離0年的天數,這里是19950501 ,TO_SECONDS(950501),TO_SECONDS('19950501'),TO_SECONDS(0101),TO_SECONDS('20000101') -- 距離0年的秒數

時間間隔生成時間

通過時間間隔轉換為時間,對比的基準是0年,特別的UNIXTIME的是1970年1月1號 0:00:00,這里是UTC時間。

-- 5 時間間隔生成時間(通過時間間隔轉換為時間,對比的基準是0年,特別的UNIXTIME的是1970年1月1號 0:00:00,這里是UTC時間) SELECT FROM_DAYS(730669) -- 把天數為日期 ,FROM_UNIXTIME(1447430881) -- 返回距離1970-01-01的時間 ,SEC_TO_TIME(2378) -- 將一個數(秒為單位)轉換為時間的hh:mm:ss的格式

系統時間

返回當前系統的時間。 -- 6 當前系統時間(返回當前系統的時間) SELECT CURDATE(),CURDATE() + 0 -- 返回YYYY-MM-DD或者YYYYMMDD格式的日期時間 ,CURRENT_DATE(),CURRENT_DATE -- CURDATE的同義詞,但返回的是時間格式,時分秒為0 ,CURTIME(),CURTIME(4) + 0 -- 僅返回時間(時分秒),參數為時間的精度,小數點后位數。 ,CURRENT_TIMESTAMP -- 同now() ,LOCALTIME -- 同now() ,LOCALTIMESTAMP -- 同now() ,NOW() -- 獲取當前系統時間 ,SYSDATE() -- 獲取當前系統時間

生成時間

根據給定的整型的年、月、日生成日期;時、分、秒生成時間。

-- 7 生成時間(根據給定的整型的年、月、日生成日期;時、分、秒生成時間) SELECT MAKEDATE(2011,32) -- 生成個日期 ,MAKETIME(12,15,30)-- 生成個時間

時區相關

時區轉換以及UTC時間。

-- 8 時區相關(時區轉換以及UTC時間) SELECT CONVERT_TZ('2021-04-08 12:00:00','-08:00','+10:00') ,UTC_DATE() -- 返回當前UTC日期 ,UTC_TIME() -- 返回當前UTC時間 ,UTC_TIMESTAMP() -- 返回當前UTC時間和日期

完整匯總

-- mysql SELECT ADDDATE('2008-01-02', INTERVAL 31 DAY) -- 日期加減 ,ADDTIME('2007-12-31 23:59:59.999999', '1 1:1:1.000002') -- 日期時間加減 ,CONVERT_TZ('2021-04-08 12:00:00','-08:00','+10:00') ,CURDATE(),CURDATE() + 0 -- 返回YYYY-MM-DD或者YYYYMMDD格式的日期時間 ,CURRENT_DATE(),CURRENT_DATE -- CURDATE的同義詞,但返回的是時間格式,時分秒為0 ,CURRENT_TIME(),CURRENT_TIME -- CURTIME()的同義詞 ,CURTIME(),CURTIME(4) + 0 -- 僅返回時間(時分秒),參數為時間的精度,小數點后位數。 ,CURRENT_TIMESTAMP -- 同now() ,DATE('2003-12-31 01:02:03') -- 提取日期時間里的日期 ,DATEDIFF('2007-12-31 23:59:59','2007-12-29') -- 兩個時間差 ,DATE_ADD('1998-01-02', INTERVAL -31 DAY),DATE_ADD('2100-12-31 23:59:59',INTERVAL '1:1' MINUTE_SECOND) -- 時間加減 ,DATE_FORMAT('2009-10-04 22:23:00', '%Y %m %d') -- 時間格式化 ,DATE_SUB('1998-01-02', INTERVAL 31 DAY) -- 時間加減 ,DAY('2021-04-08') -- 同DAYNAME ,DAYNAME('2021-04-08') -- 周所在星期數,與lc_time_names有關,中文顯示"星期四" ,DAYOFMONTH('2021-04-08') ,DAYOFWEEK('2021-04-08') -- 1 是星期天 2 是星期1依次類推 ,DAYOFYEAR('2021-04-08') -- 日期所在年的天數 ,EXTRACT(YEAR FROM '2019-07-02') -- 從日期里提取年月日時分秒 ,FROM_DAYS(730669) -- 把天數為日期 ,FROM_UNIXTIME(1447430881) -- 返回距離1970-01-01的時間 ,DATE_FORMAT('2003-10-03',GET_FORMAT(DATE,'USA')) -- 返回一個格式化的日期字符串 ,HOUR('10:05:03') -- 提取時間里的小時 ,LAST_DAY('2021-02-05')-- 返回日期所在月的最后一天 ,LOCALTIME -- 同now() ,LOCALTIMESTAMP -- 同now() ,MAKEDATE(2011,32) -- 生成個日期 ,MAKETIME(12,15,30)-- 生成個時間 ,MICROSECOND('12:00:00.123456')-- 返回時間的微秒 ,MINUTE('2008-02-03 10:05:03') -- 返回時間的分鐘 ,MONTH('2008-02-03') -- 返回日期的月份(數字形式) ,MONTHNAME('2008-02-03') -- 返回日期的月份名 ,NOW() -- 獲取當前系統時間 ,PERIOD_ADD(200801,2) -- 返日期的月份加減 ,PERIOD_DIFF(200802,200703) -- 返回兩個日期的月份差 ,QUARTER('2008-04-01') -- 返回日期所在的季度 ,SEC_TO_TIME(2378) -- 將一個數(秒為單位)轉換為時間的hh:mm:ss的格式 ,SECOND('10:05:03') -- 返回秒數 ,STR_TO_DATE('01,5,2013','%d,%m,%Y') -- 字符串按指定格式轉為時間 ,SUBDATE('2008-01-02', INTERVAL -31 DAY) -- DATE_SUB的同義詞 ,SUBTIME('2007-12-31 23:59:59.999999','1 1:1:1.000002') -- 兩個時間相加減 ,SYSDATE() -- 獲取當前系統時間 ,TIME('2003-12-31 01:02:03') -- 返回日期時間里的時間 ,TIMEDIFF('2008-12-31 23:59:59.000001','2008-12-30 01:01:01.000002') -- 時間差 , TIME_FORMAT('100:00:00', '%H %k %h %I %l') -- 時間格式化,時間大于23時,%h %I %l返回除12后的模 ,TIME_TO_SEC('00:39:38') -- 將時間轉換為對應的秒數,與SEC_TO_TIME()對應 ,TIMESTAMP('2003-12-31'),TIMESTAMP('2003-12-31 12:00:00','12:00:00') -- 1個參數時返回含全是0的時分秒時間;2個參數時返回兩個時間的加 ,TIMESTAMPADD(MINUTE,1,'2003-01-02') -- 時間加減 ,TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01') -- 指定單位的時間差 ,TO_DAYS(950501) -- 距離0年的天數 ,TO_SECONDS(950501),TO_SECONDS('19950501'),TO_SECONDS(0101),TO_SECONDS('20000101') -- 距離0年的秒數 ,UNIX_TIMESTAMP('1970-01-01 10:00:02')-- 返回Unix時間差,計算方法:(10-8)*3600+2 = 7202 比較時間時以UTC時間為基準,如果當前時間是東8區則要減去8換算成UTC時間 ,UTC_DATE() -- 返回當前UTC日期 ,UTC_TIME() -- 返回當前UTC時間 ,UTC_TIMESTAMP() -- 返回當前UTC時間和日期 ,WEEK('2021-04-09') -- 年所在周,一般一年有53周 ,WEEKDAY('2021-04-09') -- 周工作日序號,0周一, 1星期二, … 6星期天 ,WEEKOFYEAR('2021-04-09') ,YEAR('2021-04-09') -- 返回年 ,YEARWEEK('2021-04-09') -- 返回年和年所在周

執行結果

:僅截取前面部分結果, 完整版見文末附圖。

函數使用詳解

mysql日期、時間函數功能與使用方法詳解。該函數按照字母順序整理。

MYSQL 60個日期時間函數說明
序號函數名功能參數說明
1ADDDATE()日期加減函數參數是時間、間隔
2ADDTIME()時間加減函數參數是時間、間隔
3CONVERT_TZ()時區轉換參數是時間、原時區、新時區
4CURDATE()當前日期1 默認返回形式是字符串:hh:mm:ss
2 CURDATE()+0的返回形式為:hhmmss
5

CURRENT_DATE(),?

CURRENT_DATE

CURDATE()的同義詞CURDATE()
6

CURRENT_TIME(),?

CURRENT_TIME

CURTIME()的同義詞CURTIME()
7

CURRENT_TIMESTAMP(),

CURRENT_TIMESTAMP

NOW()的同義詞同now()
8CURTIME()當前時間1 默認返回形式是字符串:hh:mm:ss
2 CURTIME()+0的返回形式為:hhmmss
3 參數fsp是指定秒的精度0到6,即小數點位數
9DATE()從日期、時間類型里提取日期時間、日期
10DATE_ADD()日期加減函數參數是時間(日期)、間隔、單位
11DATE_FORMAT()時間格式轉換參數是時間(日期)、格式
12DATE_SUB()日期加減函數參數是時間(日期)、間隔、單位
13DATEDIFF()兩個時間的差參數是兩個時間(日期)
14DAY()DAYOFMONTH()的同義詞參數是時間(日期)
15DAYNAME()周所在星期數1 參數是時間(日期)
2 周所在星期數,與lc_time_names有關,中文顯示"星期四"
3 需要設置SET lc_time_names = 'zh_CN'或者全局設置
16DAYOFMONTH()月里對應的日期參數是時間(日期)
17DAYOFWEEK()周所在星期數(數字形式)參數是時間(日期)
18DAYOFYEAR()日期所在年的天數參數是時間(日期)
19EXTRACT()提取日期、時間類型的部分信息參數是時間(日期)、單位
20FROM_DAYS()把天數為日期1 參數是個整型數
2 以0年為參考起點
21FROM_UNIXTIME()格式化Unix時間戳為日期1 參數是個整型數
2 以1970-01-01為參考起點
3 參數可指定時間格式
4 時間范圍[1970-01-01 00:00:00.000000,2038-01-19 3:14:07.999999]
5 這里的時間是UTC格式
22GET_FORMAT()返回一個格式化的日期字符串1 格式支持EUR、USA、JIS、ISO、INTERNAL
2 一般結合DATE_FORMAT()一切使用
23HOUR()提取時間里的小時參數是時間(日期)
24LAST_DAY返回日期所在月的最后一天參數是時間(日期)
25

LOCALTIME(),?

LOCALTIME

NOW()的同義詞參數是時間(日期)
26

LOCALTIMESTAMP,?

LOCALTIMESTAMP()

NOW()的同義詞參數是時間(日期)
27MAKEDATE()通過年和日創建一個日期參數年整型數年、年所在日,其中日需大于0
28MAKETIME()通過時分秒創建一個時間參數年整型時、分、秒
29MICROSECOND()返回時間的微秒1 參數是時間(日期)
2 微秒是百萬分之一秒
30MINUTE()返回時間的分鐘參數是時間(日期)
31MONTH()返回日期的月份參數是時間(日期)
32MONTHNAME()返回月份的名稱

1 參數是時間(日期)
2 展示形式取決于參數lc_time_names

如:SET lc_time_names = 'zh_CN'

33NOW()返回當前時間參數fsp即秒的精度,0-6,即小數點后0到6位
34PERIOD_ADD()返日期的月份加減1 參數是整型類型日期
2 格式YYMM、YYYYMM
35PERIOD_DIFF()返回兩個日期的月份差1 參數是整型類型日期
2 格式YYMM、YYYYMM
36QUARTER()返回日期所在的季度1 參數是時間(日期)
2 返回1-4之間的一個數
37SEC_TO_TIME()將一個數(秒)轉換為時間的hh:mm:ss的格式1 參數是一個整型數
2 取值范圍是[-838:59:59,838:59:59]與TIME類型的范圍一致。
38SECOND()返回秒數參數是時間(日期)
39STR_TO_DATE()將字符串轉換為日期參數字符串、時間格式
40SUBDATE()DATE_SUB的同義詞參數是時間(日期)、間隔
41SUBTIME()提取時間參數是兩個時間(日期)
42SYSDATE()返回系統時間參數fsp即秒的精度,0-6,即小數點后0到6位
43TIME()返回時間類型的時分秒參數是時間(日期)
44TIME_FORMAT()時間格式化1 參數是時間(日期)、格式
2 參數僅為時、分、秒
3 時間大于23時,%h %I %l返回除12后的模
45TIME_TO_SEC()將時間轉換為對應的秒數1 參數是時間
2 與SEC_TO_TIME()對應
46TIMEDIFF()時間類型的時間差參數是兩個時間(日期)
47TIMESTAMP()返回時間戳1個參數時返回含全是0的時分秒時間
2個參數時返回兩個時間的加
48TIMESTAMPADD()時間戳類型的加減參數是時間(日期)、間隔、單位
49TIMESTAMPDIFF()時間戳類型的時間差參數是時間(日期)、間隔、單位
50TO_DAYS()返回以天為單位距離0年的時間差參數是整型數
51TO_SECONDS()返回以秒為單位距離0年的時間差1 參數是時間(日期)
2 可以傳整型數,會自動轉為時間類型,比如950501即為1995-05-01
52UNIX_TIMESTAMP()返回Unix時間差1 參數是整型數
2 基準日期是1970-01-01 00:00:00.000000
3 比較時間時以UTC時間為基準,如果當前時間是東8區則要減去8換算成UTC時間
4 合理的時間范圍: [0,2147483647.999999]
53UTC_DATE()返回當前UTC日期1 默認返回形式是字符串:YYY-MM-DD
2 UTC_DATE()+0的返回形式為:YYYMMDD
54UTC_TIME()返回當前UTC時間1 默認返回形式是字符串:hh:mm:ss
2 UTC_DATE()+0的返回形式為:hhmmss
55UTC_TIMESTAMP()返回當前UCT日期和時間1 參數fsp即秒的精度,0-6,即小數點后0到6位
2 默認返回形式是字符串:hh:mm:ss
3 UTC_DATE()+0的返回形式為:hhmmss
56WEEK()返回年所在周參數是時間(日期)、年對應周類型
57WEEKDAY()返回周工作日序號1 參數是時間(日期)
2 0周一, 1星期二, … 6星期天
58WEEKOFYEAR()返回年所在周

1 參數是時間(日期)

2 同week()

59YEAR()返回日期里的年份參數是時間(日期)
60YEARWEEK()返回年和年所在周參數是時間(日期)

圖片版

時區亂碼

如果出現如下錯誤:

The server time zone value '?D1ú±ê×?ê±??' is unrecognized or represents more than one time zone

或者直接在mysql客戶端里查看時區時

-- 查看時區相關參數的配置 show variables like '%time_zone%';

解決方法:需要設置數據庫時區或者修改JDBC的URL。以下以北京時間(即東八區為例)

  • 在mysql里通過命令行或者在配置文件里修改
-- Way1 mysql命令行修改時區 set global time_zone='+8:00'/* Way2 mysql配置文件里的mysqld欄位下輸入如下參數保存,重啟數據庫服務 default-time-zone = '+8:00’ */
  • 在mysql的JDBC URL里追加serverTimezone=GMT%2B8?,類似如下:
jdbc:mysql://127.0.0.1:3306/testDB?serverTimezone=GMT%2B8

完整執行結果

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的处理时间_7_60个Mysql日期时间函数汇总的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。