?關(guān)于mysql日期時間函數(shù),每回總能發(fā)現(xiàn)一些新特性,索性做一次統(tǒng)一的整理,補充下筆記庫。可以會有所遺漏,歡迎補充。
? ? ? 本文整理了30個時間日期函數(shù),分為4個段落分析,詳見下文。
?
1 獲取時間函數(shù)
-
獲取當前時間
-
sysdate()
-
now() ,?current_timestamp(),?current_timestamp,LOCALTIME ,LOCALTIME() ,LOCALTIMESTAMP ,LOCALTIMESTAMP()
-
休息ns
-
sleep(n)
-
例子
-
相同點:獲取當前時刻
-
區(qū)別:返回時刻是什么時候,執(zhí)行SQL還是調(diào)用該函數(shù)的時間值
-
-
sysdate(),返回函數(shù)調(diào)用時刻的時間值
-
now() ,current_timestamp()/current_timestamp ,LOCALTIME ,LOCALTIME() ,LOCALTIMESTAMP ,LOCALTIMESTAMP() ?返回語句調(diào)用時的時間值;
-
使用過程中,請明確清理這三者的區(qū)別
-
-
now() ,?current_timestamp(),?current_timestamp,LOCALTIME ,LOCALTIME() ,LOCALTIMESTAMP ,LOCALTIMESTAMP()
2 時間計算函數(shù)
-
時間之差
-
datediff(date1, date2 ),timediff(time1 , time2 ), ?timestampdiff(interval,datetime_expr1,datetime_expr2)
-
時間加減法
-
date_sub( date, INTERVAL?expr?type )
-
DATE_ADD(date,INTERVAL expr type)
-
adddate(date,INTERVAL expr type ) ,timestampadd(interval, count, timestamp)
-
例子
-
兩個時間之差
-
interval 可以是:
-
FRAC_SECOND 毫秒 ,SECOND 秒 ,MINUTE 分鐘 ,HOUR 小時
-
DAY 天 ,WEEK 星期 ,MONTH 月 ,QUARTER 季度 ,YEAR 年
-
-
兩個時間相減的相差時間,注意,需要是一樣的格式
-
-
兩個日期相減得相差天數(shù),注意,兩個需是一樣的格式
-
-
datediff( date1, date2 )
-
timediff( time1 , time2 )
-
TIMESTAMPDIFF(interval,datetime_expr1,datetime_expr2)
-
date_sub( date, INTERVAL?expr?type )
-
日期減去指定的時間間隔。
-
expr為正,則為減去這個時間間隔;expr為負,減去負數(shù),等于加法
-
date 參數(shù)是合法的日期表達式。expr 參數(shù)是您希望添加的時間間隔。type可以參考下方
-
@date = ‘2017-09-09 09:09:09’
-
Type 值 ? ? ? ? ? ? ? ? MICROSECOND 十分之一秒 ,?±n date_sub( @date ,INTERVAL 2 MICROSECOND ) 2017-09-09 09:09:08.999998 SECOND 秒 date_sub( @date ,INTERVAL 2 SECOND ) 2017-09-09 09:09:07 MINUTE 分鐘 date_sub( @date ,INTERVAL 2 MINUTE ) 2017-09-09 09:07:09 HOUR 小時 date_sub( @date ,INTERVAL 2 HOUR) 2017-09-09 07:07:09 DAY 天 date_sub( @date ,INTERVAL 2 DAY ) 2017-09-07?09:09:09 WEEK 周 date_sub( @date ,INTERVAL 2?WEEK ) 2017-08-26 09:09:09 MONTH 月 date_sub( @date ,INTERVAL 2?MONTH ) 2017-07-09 09:09:09 QUARTER(季度,3個月) 季度 date_sub( @date ,INTERVAL 2?QUARTER ) 2017-03-09 09:09:09 YEAR 年 date_sub( @date ,INTERVAL 2 YEAR ) 2015-09-09 09:09:09 SECOND_MICROSECOND 表達式,從秒到十分之1秒 date_sub( @date ,INTERVAL ‘2.2’ SECOND_MICROSECOND ) 2017-09-09 09:09:06.980000 MINUTE_MICROSECOND 表達式,從分鐘到十分之一秒 date_sub( @date ,INTERVAL ‘2:2.2’ MINUTE_MICROSECOND ) 2017-09-09 09:07:06.800000 MINUTE_SECOND 表達式,從分鐘到秒 date_sub( @date ,INTERVAL ‘2:2’ MINUTE_SECOND ) 2017-09-09 09:07:07 HOUR_MICROSECOND 表達式,從小時到十分之一秒 date_sub( @date ,INTERVAL?‘2:2:2.2’ HOUR_MICROSECOND ) 2017-09-09 07:07:06.800000 HOUR_SECOND 表達式,小時到秒 date_sub( @date ,INTERVAL??‘2:2:2’ ?HOUR_SECOND ) 2017-09-09 07:07:07 HOUR_MINUTE 表達式,小時到分鐘 date_sub( @date ,INTERVAL?‘2:2’ ?HOUR_MINUTE ) 2017-09-09 07:07:09 DAY_MICROSECOND 表達式,天到十分之一秒, date_sub( @date ,INTERVAL?‘2 2:2:2.2’ DAY_MICROSECOND ) 2017-09-07 07:07:06.800000 DAY_SECOND 表達式,天到秒, date_sub( @date ,INTERVAL??‘2 2:2:2’ ?DAY_SECOND ) 2017-09-07 07:07:07 DAY_MINUTE 表達式,天到分鐘, date_sub( @date ,INTERVAL ‘2 2:2 ‘ DAY_MINUTE ) 2017-09-07 07:07:09 DAY_HOUR 表達式,天到小時, date_sub( @date ,INTERVAL?‘2 2’ ?DAY_HOUR ) 2017-09-07 07:09:09 YEAR_MONTH 表達式,年到月, date_sub( @date ,INTERVAL?‘2 2’ YEAR_MONTH ) 2015-07-09 09:09:09
-
DATE_ADD(date,INTERVAL expr type)
-
日期增加指定的時間間隔,使用方法 跟 date_sub一樣
-
adddate(date,INTERVAL expr type )
-
日期增加 n 天
-
日期增加指定的時間間隔,使用方法 DATE_ADD? 一樣
-
adddate(date,INTERVAL expr type )
-
adddate(date, n?)
-
timestampadd(interval, count, timestamp)
-
Year
-
quarter
-
Month
-
Day
-
Week
-
Hour
-
minute
-
second
-
millisecond
-
-
時間增加函數(shù)
3 時間轉(zhuǎn)換函數(shù)
-
from_unixtime(),unix_timestamp()
-
前者將 時間戳 轉(zhuǎn)化為 日期時間 格式,后者將 日期時間 格式轉(zhuǎn)化為時間戳
-
makedate(year, day_of_year),maketime(hour,minute,second)
-
makedate 根據(jù) 年份跟年份中的第幾天,轉(zhuǎn)化為日期
-
maketime 根據(jù) 小時 分鐘 秒 ,轉(zhuǎn)化為時間
-
date(datetime),timestamp(date [,time])
-
前者將 日期時間 格式 轉(zhuǎn)化為 日期格式(僅含有 年月日),后者 將日期 轉(zhuǎn)化為 日期時間 格式
-
convert_tz(datetime, from_tz, to_tz)
-
根據(jù) A 時區(qū)的時間,返回在B時區(qū) 的時間是多少
-
date_format(datetime,format),str_to_date(string,format)
-
前者將 日期時間 轉(zhuǎn)化為 指定格式的文本,后者將 文本 轉(zhuǎn)化為制定格式的 日期時間
-
舉
-
實際應(yīng)用
-
SELECT NOW(),DATE_FORMAT(NOW(),’%Y-%m-%d’) ‘%Y-%m-%d’;
-
-
年
-
月
-
日
-
時間模塊
-
小時
-
分鐘
-
秒
-
周
-
%X? ? ?年,其中的星期日是周的第一天,4 位,與 %V 使用
-
%x? ? ?年,其中的星期一是周的第一天,4 位,與 %v 使用
-
%Y? ? ?年,4 位
-
%y? ? ?年,2 位
-
-
%b? ? ?縮寫月名
-
%c? ? ?月,數(shù)值
-
%M? ? ?月名
-
%m? ? ?月,數(shù)值(00-12)
-
-
%D? ? ?帶有英文前綴的月中的天
-
%d? ? ?月的天,數(shù)值(00-31)
-
%e? ? ?月的天,數(shù)值(0-31)
-
%j? ? ?年的天 (001-366)
-
-
%T? ? ?時間, 24-小時 (hh:mm:ss)
-
%r? ? ?時間,12-小時(hh:mm:ss AM 或 PM)
-
-
%H? ? ?小時 (00-23)
-
%k? ? ?小時 (0-23)
-
%h? ? ?小時 (01-12)
-
%I? ? ?小時 (01-12) #%h跟%I,沒區(qū)別 ( 大寫的 i )
-
%l? ? ?小時 (1-12) 小寫的 L
-
%p? ? ?AM 或 PM
-
-
-
%i? ? ?分鐘,數(shù)值(00-59)
-
-
%S? ? ?秒(00-59)
-
%s? ? ?秒(00-59)
-
%f? ? ?微秒
-
%a? ? ?縮寫星期名
-
%W? ? ?星期名,英文全稱 Saturday
-
%w? ? ?周的天 (0=星期日, 6=星期六,0-6)
-
%U? ? ?周 (00-52) 星期日是一周的第一天
-
%u? ? ?周 (00-52) 星期一是一周的第一天
-
%V? ? ?周 (01-53) 星期日是一周的第一天,與 %X 使用
-
%v? ? ?周 (01-53) 星期一是一周的第一天,與 %x 使用
-
-
將 string 轉(zhuǎn)化為 日期格式,string 哪幾個字符是年月日時間,由format匹配
-
-
時區(qū)轉(zhuǎn)化
-
datetime為from_zt的時區(qū),返回to_tz時區(qū)的時間
-
-
時間戳到轉(zhuǎn)換
-
-
日期時間格式 轉(zhuǎn)化為 日期格式
-
-
makedate 根據(jù) 年份跟年份中的第幾天,轉(zhuǎn)化為日期
-
maketime 根據(jù) 小時 分鐘 秒 ,轉(zhuǎn)化為時間
-
-
將時間轉(zhuǎn)化為時間戳
-
-
將時間戳轉(zhuǎn)化為時間
-
-
from_unixtime
-
unix_timestamp
-
makedate(year, day_of_year),maketime(hour,minute,second)
-
date(datetime)
-
timestamp(date),timestamp(date,time)
-
convert_tz(datetime,from_tz,to_tz)
-
str_to_date(string,format)
-
date_format
4 獲取部分函數(shù)
-
獲取第幾天
-
to_days(datetime ),dayofyear(datetime ),dayofmonth(datetime)
-
todays返回從 ‘0000-00-00’ 到datetime之間隔了多少天
-
dayofyear,返回 datetime 這一天是一年中的第幾天
-
dayofmonth,返回 datetime 這一天是 一個月中的第幾天
-
-
秒轉(zhuǎn)化
-
time_to_sec(time),sec_to_time(number)
-
前者根據(jù)時間轉(zhuǎn)化為秒數(shù),后者根據(jù)秒數(shù)轉(zhuǎn)化為時間
-
?