处理时间_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日期、時間函數功能與使用方法詳解。該函數按照字母順序整理。
| 序號 | 函數名 | 功能 | 參數說明 |
| 1 | ADDDATE() | 日期加減函數 | 參數是時間、間隔 |
| 2 | ADDTIME() | 時間加減函數 | 參數是時間、間隔 |
| 3 | CONVERT_TZ() | 時區轉換 | 參數是時間、原時區、新時區 |
| 4 | CURDATE() | 當前日期 | 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() |
| 8 | CURTIME() | 當前時間 | 1 默認返回形式是字符串:hh:mm:ss 2 CURTIME()+0的返回形式為:hhmmss 3 參數fsp是指定秒的精度0到6,即小數點位數 |
| 9 | DATE() | 從日期、時間類型里提取日期 | 時間、日期 |
| 10 | DATE_ADD() | 日期加減函數 | 參數是時間(日期)、間隔、單位 |
| 11 | DATE_FORMAT() | 時間格式轉換 | 參數是時間(日期)、格式 |
| 12 | DATE_SUB() | 日期加減函數 | 參數是時間(日期)、間隔、單位 |
| 13 | DATEDIFF() | 兩個時間的差 | 參數是兩個時間(日期) |
| 14 | DAY() | DAYOFMONTH()的同義詞 | 參數是時間(日期) |
| 15 | DAYNAME() | 周所在星期數 | 1 參數是時間(日期) 2 周所在星期數,與lc_time_names有關,中文顯示"星期四" 3 需要設置SET lc_time_names = 'zh_CN'或者全局設置 |
| 16 | DAYOFMONTH() | 月里對應的日期 | 參數是時間(日期) |
| 17 | DAYOFWEEK() | 周所在星期數(數字形式) | 參數是時間(日期) |
| 18 | DAYOFYEAR() | 日期所在年的天數 | 參數是時間(日期) |
| 19 | EXTRACT() | 提取日期、時間類型的部分信息 | 參數是時間(日期)、單位 |
| 20 | FROM_DAYS() | 把天數為日期 | 1 參數是個整型數 2 以0年為參考起點 |
| 21 | FROM_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格式 |
| 22 | GET_FORMAT() | 返回一個格式化的日期字符串 | 1 格式支持EUR、USA、JIS、ISO、INTERNAL 2 一般結合DATE_FORMAT()一切使用 |
| 23 | HOUR() | 提取時間里的小時 | 參數是時間(日期) |
| 24 | LAST_DAY | 返回日期所在月的最后一天 | 參數是時間(日期) |
| 25 | LOCALTIME(),? LOCALTIME | NOW()的同義詞 | 參數是時間(日期) |
| 26 | LOCALTIMESTAMP,? LOCALTIMESTAMP() | NOW()的同義詞 | 參數是時間(日期) |
| 27 | MAKEDATE() | 通過年和日創建一個日期 | 參數年整型數年、年所在日,其中日需大于0 |
| 28 | MAKETIME() | 通過時分秒創建一個時間 | 參數年整型時、分、秒 |
| 29 | MICROSECOND() | 返回時間的微秒 | 1 參數是時間(日期) 2 微秒是百萬分之一秒 |
| 30 | MINUTE() | 返回時間的分鐘 | 參數是時間(日期) |
| 31 | MONTH() | 返回日期的月份 | 參數是時間(日期) |
| 32 | MONTHNAME() | 返回月份的名稱 | 1 參數是時間(日期) 如:SET lc_time_names = 'zh_CN' |
| 33 | NOW() | 返回當前時間 | 參數fsp即秒的精度,0-6,即小數點后0到6位 |
| 34 | PERIOD_ADD() | 返日期的月份加減 | 1 參數是整型類型日期 2 格式YYMM、YYYYMM |
| 35 | PERIOD_DIFF() | 返回兩個日期的月份差 | 1 參數是整型類型日期 2 格式YYMM、YYYYMM |
| 36 | QUARTER() | 返回日期所在的季度 | 1 參數是時間(日期) 2 返回1-4之間的一個數 |
| 37 | SEC_TO_TIME() | 將一個數(秒)轉換為時間的hh:mm:ss的格式 | 1 參數是一個整型數 2 取值范圍是[-838:59:59,838:59:59]與TIME類型的范圍一致。 |
| 38 | SECOND() | 返回秒數 | 參數是時間(日期) |
| 39 | STR_TO_DATE() | 將字符串轉換為日期 | 參數字符串、時間格式 |
| 40 | SUBDATE() | DATE_SUB的同義詞 | 參數是時間(日期)、間隔 |
| 41 | SUBTIME() | 提取時間 | 參數是兩個時間(日期) |
| 42 | SYSDATE() | 返回系統時間 | 參數fsp即秒的精度,0-6,即小數點后0到6位 |
| 43 | TIME() | 返回時間類型的時分秒 | 參數是時間(日期) |
| 44 | TIME_FORMAT() | 時間格式化 | 1 參數是時間(日期)、格式 2 參數僅為時、分、秒 3 時間大于23時,%h %I %l返回除12后的模 |
| 45 | TIME_TO_SEC() | 將時間轉換為對應的秒數 | 1 參數是時間 2 與SEC_TO_TIME()對應 |
| 46 | TIMEDIFF() | 時間類型的時間差 | 參數是兩個時間(日期) |
| 47 | TIMESTAMP() | 返回時間戳 | 1個參數時返回含全是0的時分秒時間 2個參數時返回兩個時間的加 |
| 48 | TIMESTAMPADD() | 時間戳類型的加減 | 參數是時間(日期)、間隔、單位 |
| 49 | TIMESTAMPDIFF() | 時間戳類型的時間差 | 參數是時間(日期)、間隔、單位 |
| 50 | TO_DAYS() | 返回以天為單位距離0年的時間差 | 參數是整型數 |
| 51 | TO_SECONDS() | 返回以秒為單位距離0年的時間差 | 1 參數是時間(日期) 2 可以傳整型數,會自動轉為時間類型,比如950501即為1995-05-01 |
| 52 | UNIX_TIMESTAMP() | 返回Unix時間差 | 1 參數是整型數 2 基準日期是1970-01-01 00:00:00.000000 3 比較時間時以UTC時間為基準,如果當前時間是東8區則要減去8換算成UTC時間 4 合理的時間范圍: [0,2147483647.999999] |
| 53 | UTC_DATE() | 返回當前UTC日期 | 1 默認返回形式是字符串:YYY-MM-DD 2 UTC_DATE()+0的返回形式為:YYYMMDD |
| 54 | UTC_TIME() | 返回當前UTC時間 | 1 默認返回形式是字符串:hh:mm:ss 2 UTC_DATE()+0的返回形式為:hhmmss |
| 55 | UTC_TIMESTAMP() | 返回當前UCT日期和時間 | 1 參數fsp即秒的精度,0-6,即小數點后0到6位 2 默認返回形式是字符串:hh:mm:ss 3 UTC_DATE()+0的返回形式為:hhmmss |
| 56 | WEEK() | 返回年所在周 | 參數是時間(日期)、年對應周類型 |
| 57 | WEEKDAY() | 返回周工作日序號 | 1 參數是時間(日期) 2 0周一, 1星期二, … 6星期天 |
| 58 | WEEKOFYEAR() | 返回年所在周 | 1 參數是時間(日期) 2 同week() |
| 59 | YEAR() | 返回日期里的年份 | 參數是時間(日期) |
| 60 | YEARWEEK() | 返回年和年所在周 | 參數是時間(日期) |
圖片版
時區亂碼
如果出現如下錯誤:
The server time zone value '?D1ú±ê×?ê±??' is unrecognized or represents more than one time zone
或者直接在mysql客戶端里查看時區時
-- 查看時區相關參數的配置 show variables like '%time_zone%';解決方法:需要設置數據庫時區或者修改JDBC的URL。以下以北京時間(即東八區為例)
- 在mysql里通過命令行或者在配置文件里修改
- 在mysql的JDBC URL里追加serverTimezone=GMT%2B8?,類似如下:
完整執行結果
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的处理时间_7_60个Mysql日期时间函数汇总的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 处理时间_6_SQL Server常见的
- 下一篇: linux cmake编译源码,linu