本文給大家分享的是mysql之日期時間處理函數?,非常的詳細,也很實用,非常適合初學者,有需要的小伙伴參考下。
以下基本包含mysql所有日期時間函數
--?MySQL日期時間處理函數 --?當前日期:2017-05-12(突然發現今天512,是不是會拉防空警報) SELECT?NOW()?FROM?DUAL;--?當前日期時間:2017-05-12?11:41:47 --?在MySQL里也存在和Oracle里類似的dual虛擬表:官方聲明純粹是為了滿足select?...?from...這一習慣問題,mysql會忽略對該表的引用。 --?那么MySQL中就不用DUAL了吧。 SELECT?NOW();--?當前日期時間:2017-05-12?11:41:55 --?除了?now()?函數能獲得當前的日期時間外,MySQL?中還有下面的函數: SELECT?CURRENT_TIMESTAMP();--?2017-05-15?10:19:31 SELECT?CURRENT_TIMESTAMP;--?2017-05-15?10:19:51 SELECT?LOCALTIME();--?2017-05-15?10:20:00 SELECT?LOCALTIME;--?2017-05-15?10:20:10 SELECT?LOCALTIMESTAMP();--?2017-05-15?10:20:21(v4.0.6) SELECT?LOCALTIMESTAMP;--?2017-05-15?10:20:30(v4.0.6) --?這些日期時間函數,都等同于?now()。鑒于?now()?函數簡短易記,建議總是使用?now()來替代上面列出的函數。 SELECT?SYSDATE();--?當前日期時間:2017-05-12?11:42:03 --?sysdate()?日期時間函數跟?now()?類似, --?不同之處在于:now()?在執行開始時值就得到了;sysdate()?在函數執行時動態得到值。 --?看下面的例子就明白了: SELECT?NOW(),?SLEEP(3),?NOW(); SELECT?SYSDATE(),?SLEEP(3),?SYSDATE(); SELECT?CURDATE();--?當前日期:2017-05-12 SELECT?CURRENT_DATE();--?當前日期:等同于?CURDATE() SELECT?CURRENT_DATE;--?當前日期:等同于?CURDATE() SELECT?CURTIME();--?當前時間:11:42:47 SELECT?CURRENT_TIME();--?當前時間:等同于?CURTIME() SELECT?CURRENT_TIME;--?當前時間:等同于?CURTIME() --?獲得當前?UTC?日期時間函數 SELECT?UTC_TIMESTAMP(),?UTC_DATE(),?UTC_TIME() --?MySQL?獲得當前時間戳函數:current_timestamp,?current_timestamp() SELECT?CURRENT_TIMESTAMP,?CURRENT_TIMESTAMP();--?2017-05-15?10:32:21?|?2017-05-15?10:32:21 --?MySQL?日期時間?Extract(選取)?函數 SET?@dt?=?'2017-05-15?10:37:14.123456'; SELECT?DATE(@dt);--?獲取日期:2017-05-15 SELECT?TIME('2017-05-15?10:37:14.123456');--?獲取時間:10:37:14.123456 SELECT?YEAR('2017-05-15?10:37:14.123456');--?獲取年份 SELECT?MONTH('2017-05-15?10:37:14.123456');--?獲取月份 SELECT?DAY('2017-05-15?10:37:14.123456');--?獲取日 SELECT?HOUR('2017-05-15?10:37:14.123456');--?獲取時 SELECT?MINUTE('2017-05-15?10:37:14.123456');--?獲取分 SELECT?SECOND('2017-05-15?10:37:14.123456');--?獲取秒 SELECT?MICROSECOND('2017-05-15?10:37:14.123456');--?獲取毫秒 SELECT?QUARTER('2017-05-15?10:37:14.123456');--?獲取季度 SELECT?WEEK('2017-05-15?10:37:14.123456');--?20?(獲取周) SELECT?WEEK('2017-05-15?10:37:14.123456',?7);--?******?測試此函數在MySQL5.6下無效 SELECT?WEEKOFYEAR('2017-05-15?10:37:14.123456');--?同week() SELECT?DAYOFYEAR('2017-05-15?10:37:14.123456');--?135?(日期在年度中第幾天) SELECT?DAYOFMONTH('2017-05-15?10:37:14.123456');--?5?(日期在月度中第幾天) SELECT?DAYOFWEEK('2017-05-15?10:37:14.123456');--?2?(日期在周中第幾天;周日為第一天) SELECT?WEEKDAY('2017-05-15?10:37:14.123456');--?0 SELECT?WEEKDAY('2017-05-21?10:37:14.123456');--?6(與dayofweek()都表示日期在周的第幾天,只是參考標準不同,weekday()周一為第0天,周日為第6天) SELECT?YEARWEEK('2017-05-15?10:37:14.123456');--?201720(年和周) SELECT?EXTRACT(YEAR?FROM?'2017-05-15?10:37:14.123456'); SELECT?EXTRACT(MONTH?FROM?'2017-05-15?10:37:14.123456'); SELECT?EXTRACT(DAY?FROM?'2017-05-15?10:37:14.123456'); SELECT?EXTRACT(HOUR?FROM?'2017-05-15?10:37:14.123456'); SELECT?EXTRACT(MINUTE?FROM?'2017-05-15?10:37:14.123456'); SELECT?EXTRACT(SECOND?FROM?'2017-05-15?10:37:14.123456'); SELECT?EXTRACT(MICROSECOND?FROM?'2017-05-15?10:37:14.123456'); SELECT?EXTRACT(QUARTER?FROM?'2017-05-15?10:37:14.123456'); SELECT?EXTRACT(WEEK?FROM?'2017-05-15?10:37:14.123456'); SELECT?EXTRACT(YEAR_MONTH?FROM?'2017-05-15?10:37:14.123456'); SELECT?EXTRACT(DAY_HOUR?FROM?'2017-05-15?10:37:14.123456'); SELECT?EXTRACT(DAY_MINUTE?FROM?'2017-05-15?10:37:14.123456');--?151037(日時分) SELECT?EXTRACT(DAY_SECOND?FROM?'2017-05-15?10:37:14.123456');--?15103714(日時分秒) SELECT?EXTRACT(DAY_MICROSECOND?FROM?'2017-05-15?10:37:14.123456');--?15103714123456(日時分秒毫秒) SELECT?EXTRACT(HOUR_MINUTE?FROM?'2017-05-15?10:37:14.123456');--?1037(時分) SELECT?EXTRACT(HOUR_SECOND?FROM?'2017-05-15?10:37:14.123456');--?103714(時分秒) SELECT?EXTRACT(HOUR_MICROSECOND?FROM?'2017-05-15?10:37:14.123456');--?103714123456(日時分秒毫秒) SELECT?EXTRACT(MINUTE_SECOND?FROM?'2017-05-15?10:37:14.123456');--?3714(分秒) SELECT?EXTRACT(MINUTE_MICROSECOND?FROM?'2017-05-15?10:37:14.123456');--?3714123456(分秒毫秒) SELECT?EXTRACT(SECOND_MICROSECOND?FROM?'2017-05-15?10:37:14.123456');--?14123456(秒毫秒) --?MySQL?Extract()?函數除了沒有date(),time()?的功能外,其他功能一應具全。 --?并且還具有選取‘day_microsecond'?等功能。 --?注意這里不是只選取?day?和?microsecond,而是從日期的?day?部分一直選取到?microsecond?部分。 SELECT?DAYNAME('2017-05-15?10:37:14.123456');--?Monday(返回英文星期) SELECT?MONTHNAME('2017-05-15?10:37:14.123456');--?May(返回英文月份) SELECT?LAST_DAY('2016-02-01');--?2016-02-29?(返回月份中最后一天) SELECT?LAST_DAY('2016-05-01');--?2016-05-31 --?DATE_ADD(date,INTERVAL?expr?type)?從日期加上指定的時間間隔 --?type參數可參考:http://www.w3school.com.cn/sql/func_date_sub.asp SELECT?DATE_ADD('2017-05-15?10:37:14.123456',INTERVAL?1?YEAR);--?表示:2018-05-15?10:37:14.123456 SELECT?DATE_ADD('2017-05-15?10:37:14.123456',INTERVAL?1?QUARTER);--?表示:2017-08-15?10:37:14.123456 SELECT?DATE_ADD('2017-05-15?10:37:14.123456',INTERVAL?1?MONTH);--?表示:2017-06-15?10:37:14.123456 SELECT?DATE_ADD('2017-05-15?10:37:14.123456',INTERVAL?1?WEEK);--?表示:2017-05-22?10:37:14.123456 SELECT?DATE_ADD('2017-05-15?10:37:14.123456',INTERVAL?1?DAY);--?表示:2017-05-16?10:37:14.123456 SELECT?DATE_ADD('2017-05-15?10:37:14.123456',INTERVAL?1?HOUR);--?表示:2017-05-15?11:37:14.123456 SELECT?DATE_ADD('2017-05-15?10:37:14.123456',INTERVAL?1?MINUTE);--?表示:2017-05-15?10:38:14.123456 SELECT?DATE_ADD('2017-05-15?10:37:14.123456',INTERVAL?1?SECOND);--?表示:2017-05-15?10:37:15.123456 SELECT?DATE_ADD('2017-05-15?10:37:14.123456',INTERVAL?1?MICROSECOND);--?表示:2017-05-15?10:37:14.123457 --?DATE_SUB(date,INTERVAL?expr?type)?從日期減去指定的時間間隔 SELECT?DATE_SUB('2017-05-15?10:37:14.123456',INTERVAL?1?YEAR);--?表示:2016-05-15?10:37:14.123456 SELECT?DATE_SUB('2017-05-15?10:37:14.123456',INTERVAL?1?QUARTER);--?表示:2017-02-15?10:37:14.123456 SELECT?DATE_SUB('2017-05-15?10:37:14.123456',INTERVAL?1?MONTH);--?表示:2017-04-15?10:37:14.123456 SELECT?DATE_SUB('2017-05-15?10:37:14.123456',INTERVAL?1?WEEK);--?表示:2017-05-08?10:37:14.123456 SELECT?DATE_SUB('2017-05-15?10:37:14.123456',INTERVAL?1?DAY);--?表示:2017-05-14?10:37:14.123456 SELECT?DATE_SUB('2017-05-15?10:37:14.123456',INTERVAL?1?HOUR);--?表示:2017-05-15?09:37:14.123456 SELECT?DATE_SUB('2017-05-15?10:37:14.123456',INTERVAL?1?MINUTE);--?表示:2017-05-15?10:36:14.123456 SELECT?DATE_SUB('2017-05-15?10:37:14.123456',INTERVAL?1?SECOND);--?表示:2017-05-15?10:37:13.123456 SELECT?DATE_SUB('2017-05-15?10:37:14.123456',INTERVAL?1?MICROSECOND);--?表示:2017-05-15?10:37:14.123455 --?經特殊日期測試,DATE_SUB(date,INTERVAL?expr?type)可放心使用 SELECT?DATE_SUB(CURDATE(),INTERVAL?1?DAY);--?前一天:2017-05-11 SELECT?DATE_SUB(CURDATE(),INTERVAL?-1?DAY);--?后一天:2017-05-13 SELECT?DATE_SUB(CURDATE(),INTERVAL?1?MONTH);--?一個月前日期:2017-04-12 SELECT?DATE_SUB(CURDATE(),INTERVAL?-1?MONTH);--?一個月后日期:2017-06-12 SELECT?DATE_SUB(CURDATE(),INTERVAL?1?YEAR);--?一年前日期:2016-05-12 SELECT?DATE_SUB(CURDATE(),INTERVAL?-1?YEAR);--?一年后日期:20178-06-12 --?MySQL?date_sub()?日期時間函數?和?date_add()?用法一致,并且可以用INTERNAL?-1?xxx的形式互換使用; --?另外,MySQL?中還有兩個函數?subdate(),?subtime(),建議,用?date_sub()?來替代。 --?MySQL?另類日期函數:period_add(P,N),?period_diff(P1,P2) --?函數參數“P”?的格式為“YYYYMM”?或者?“YYMM”,第二個參數“N”?表示增加或減去?N?month(月)。 --?MySQL?period_add(P,N):日期加/減去N月。 SELECT?PERIOD_ADD(201705,2),?PERIOD_ADD(201705,-2);--?201707??20170503 --?period_diff(P1,P2):日期?P1-P2,返回?N?個月。 SELECT?PERIOD_DIFF(201706,?201703);--? --?datediff(date1,date2):兩個日期相減?date1?-?date2,返回天數 SELECT?DATEDIFF('2017-06-05','2017-05-29');--?7 --?TIMEDIFF(time1,time2):兩個日期相減?time1?-?time2,返回?TIME?差值 SELECT?TIMEDIFF('2017-06-05?19:28:37',?'2017-06-05?17:00:00');--?02:28:37 --?MySQL日期轉換函數 SELECT?TIME_TO_SEC('01:00:05');?--?3605 SELECT?SEC_TO_TIME(3605);--?01:00:05 --?MySQL?(日期、天數)轉換函數:to_days(date),?from_days(days) SELECT?TO_DAYS('0000-00-00');?--?NULL? SELECT?TO_DAYS('2017-06-05');?--?736850 SELECT?FROM_DAYS(0);???????????--?'0000-00-00'? SELECT?FROM_DAYS(736850);??????--?'2017-06-05' --?MySQL?Str?to?Date?(字符串轉換為日期)函數:str_to_date(str,?format) SELECT?STR_TO_DATE('06.05.2017?19:40:30',?'%m.%d.%Y?%H:%i:%s');--?2017-06-05?19:40:30 SELECT?STR_TO_DATE('06/05/2017',?'%m/%d/%Y');??????????????????--?2017-06-05 SELECT?STR_TO_DATE('2017/12/3','%Y/%m/%d') ???????--?2017-12-03 SELECT?STR_TO_DATE('20:09:30',?'%h:%i:%s') ???????--?NULL(超過12時的小時用小寫h,得到的結果為NULL) --?日期時間格式化 SELECT?DATE_FORMAT('2017-05-12?17:03:51',?'%Y年%m月%d日?%H時%i分%s秒');--?2017年05月12日?17時03分51秒(具體需要什么格式的數據根據實際情況來;小寫h為12小時制;) SELECT?TIME_FORMAT('2017-05-12?17:03:51',?'%Y年%m月%d日?%H時%i分%s秒');--?0000年00月00日?17時03分51秒(time_format()只能用于時間的格式化) --?STR_TO_DATE()和DATE_FORMATE()為互逆操作 --?MySQL?獲得國家地區時間格式函數:get_format() --?MySQL?get_format()?語法:get_format(date|time|datetime,?'eur'|'usa'|'jis'|'iso'|'internal' --?MySQL?get_format()?用法的全部示例: SELECT?GET_FORMAT(DATE,'usa');??? --?'%m.%d.%Y'? SELECT?GET_FORMAT(DATE,'jis');??? --?'%Y-%m-%d'? SELECT?GET_FORMAT(DATE,'iso');??? --?'%Y-%m-%d'? SELECT?GET_FORMAT(DATE,'eur');??? --?'%d.%m.%Y'? SELECT?GET_FORMAT(DATE,'internal');??? --?'%Y%m%d'? SELECT?GET_FORMAT(DATETIME,'usa');??? --?'%Y-%m-%d?%H.%i.%s'? SELECT?GET_FORMAT(DATETIME,'jis');??? --?'%Y-%m-%d?%H:%i:%s'? SELECT?GET_FORMAT(DATETIME,'iso');??? --?'%Y-%m-%d?%H:%i:%s'? SELECT?GET_FORMAT(DATETIME,'eur');??? --?'%Y-%m-%d?%H.%i.%s'? SELECT?GET_FORMAT(DATETIME,'internal');?--?'%Y%m%d%H%i%s'? SELECT?GET_FORMAT(TIME,'usa');??? --?'%h:%i:%s?%p'? SELECT?GET_FORMAT(TIME,'jis');??? --?'%H:%i:%s'? SELECT?GET_FORMAT(TIME,'iso');??? --?'%H:%i:%s'? SELECT?GET_FORMAT(TIME,'eur');??? --?'%H.%i.%s'? SELECT?GET_FORMAT(TIME,'internal');?????--?'%H%i%s' --?MySQL?拼湊日期、時間函數:makdedate(year,dayofyear),?maketime(hour,minute,second) SELECT?MAKEDATE(2017,31);???--?'2017-01-31'? SELECT?MAKEDATE(2017,32);???--?'2017-02-01' SELECT?MAKETIME(19,52,35);??--?'19:52:35' --?MySQL?時區(timezone)轉換函數:convert_tz(dt,from_tz,to_tz) SELECT?CONVERT_TZ('2017-06-05?19:54:12',?'+08:00',?'+00:00');?--?2017-06-05?11:54:12 --?MySQL?(Unix?時間戳、日期)轉換函數 --?unix_timestamp(),?unix_timestamp(date),?from_unixtime(unix_timestamp),?from_unixtime(unix_timestamp,format) --?將具體時間時間轉為timestamp SELECT?UNIX_TIMESTAMP();--?當前時間的時間戳:1494815779 SELECT?UNIX_TIMESTAMP('2017-05-15');--?指定日期的時間戳:1494777600 SELECT?UNIX_TIMESTAMP('2017-05-15?10:37:14');--?指定日期時間的時間戳:1494815834 --?將時間戳轉為具體時間 SELECT?FROM_UNIXTIME(1494815834);--?2017-05-15?10:37:14 SELECT?FROM_UNIXTIME(1494815834,?'%Y年%m月%d日?%h時%分:%s秒');--?獲取時間戳對應的格式化日期時間 --?MySQL?時間戳(timestamp)轉換、增、減函數 SELECT?TIMESTAMP('2017-05-15');--?2017-05-15?00:00:00 SELECT?TIMESTAMP('2017-05-15?08:12:25',?'01:01:01');--?2017-05-15?09:13:26 SELECT?DATE_ADD('2017-05-15?08:12:25',?INTERVAL?1?DAY);--?2017-05-16?08:12:25 SELECT?TIMESTAMPADD(DAY,?1,?'2017-05-15?08:12:25');--?2017-05-16?08:12:25;?MySQL?timestampadd()?函數類似于?date_add()。 SELECT?TIMESTAMPDIFF(YEAR,?'2017-06-01',?'2016-05-15');--?-1 SELECT?TIMESTAMPDIFF(MONTH,?'2017-06-01',?'2016-06-15');--?-11 SELECT?TIMESTAMPDIFF(DAY,?'2017-06-01',?'2016-06-15');--?-351 SELECT?TIMESTAMPDIFF(HOUR,?'2017-06-01?08:12:25',?'2016-06-15?00:00:00');--?-8432 SELECT?TIMESTAMPDIFF(MINUTE,?'2017-06-01?08:12:25',?'2016-06-15?00:00:00');--?-505932 SELECT?TIMESTAMPDIFF(SECOND,?'2017-06-01?08:12:25',?'2016-06-15?00:00:00');--?-30355945
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END