mysql是最流行的關系型數據庫管理系統,在web應用方面mysql是最好的rdbms應用軟件之一。本次介紹中,會讓大家快速掌握mysql獲取當前時間和時間戳的方法,輕松使用mysql數據庫。
獲得當前日期+時間(date?+?time)函數:now()
MySQL>?select?now(); +———————+ |?now()?| +———————+ |?2013-04-08?20:56:19?| +———————+
除了?now()?函數能獲得當前的日期時間外,MySQL?中還有下面的函數:
current_timestamp() ,current_timestamp,localtime() ,localtime ,localtimestamp?—?(v4.0.6) ,localtimestamp()?—?(v4.0.6)
這些日期時間函數,都等同于?now()。鑒于?now()?函數簡短易記,建議總是使用?now()?來替代上面列出的函數。
獲得當前日期+時間(date?+?time)函數:sysdate()
sysdate()?日期時間函數跟?now()?類似,不同之處在于:now()?在執行開始時值就得到了,?sysdate()?在函數執行時動態得到值。看下面的例子就明白了:
mysql>?select?now(),?sleep(3),?now(); +———————+———-+———————+ |?now()?|?sleep(3)?|?now()?| +———————+———-+———————+ |?2013-04-08?20:57:46?|?0?|?2013-04-08?20:57:46?| +———————+———-+———————+ mysql>?select?sysdate(),?sleep(3),?sysdate(); +———————+———-+———————+ |?sysdate()?|?sleep(3)?|?sysdate()?| +———————+———-+———————+ |?2013-04-08?20:58:47?|?0?|?2013-04-08?20:58:50?| +———————+———-+———————+
可以看到,雖然中途?sleep?3?秒,但?now()?函數兩次的時間值是相同的;?sysdate()?函數兩次得到的時間值相差?3?秒。MySQL?Manual?中是這樣描述?sysdate()?的:Return?the?time?at?which?the?function?executes。
sysdate()?日期時間函數,一般情況下很少用到。
獲得當前日期(date)函數:curdate()
mysql>?select?curdate(); +————+ |?curdate()?| +————+ |?2013-04-08?| +————+
其中,下面的兩個日期函數等同于?curdate():
current_date() ,current_date
獲得當前時間(time)函數:curtime()
mysql>?select?curtime(); +———–+ |?curtime()?| +———–+ |?21:00:11?| +———–+
其中,下面的兩個時間函數等同于?curtime():?
current_time() ,current_time
獲得當前?UTC?日期時間函數:utc_date(),?utc_time(),?utc_timestamp()
mysql>?select?utc_timestamp(),?utc_date(),?utc_time(),now(); +———————+————+————+———————+ |?utc_timestamp()?|?utc_date()?|?utc_time()?|?now()?| +———————+————+————+———————+ |?2013-04-08?13:01:32?|?2013-04-08?|?13:01:32?|2013-04-08?21:01:32?| +———————+————+————+———————+
因為我國位于東八時區,所以本地時間?=?UTC?時間?+?8?小時。UTC?時間在業務涉及多個國家和地區的時候,非常有用。
MySQL?日期時間?Extract(選?。?函數。
1.?選取日期時間的各個部分:日期、時間、年、季度、月、日、小時、分鐘、秒、微秒
set?@dt?=?’2008-09-10?07:15:30.123456′; select?date(@dt);?—?2008-09-10 select?time(@dt);?—?07:15:30.123456 select?year(@dt);?—?2008 select?quarter(@dt);?—?3 select?month(@dt);?—?9 select?week(@dt);?—?36 select?day(@dt);?—?10 select?hour(@dt);?—?7 select?minute(@dt);?—?15 select?second(@dt);?—?30 select?microsecond(@dt);?—?123456
2.?MySQL?Extract()?函數,可以上面實現類似的功能:
et?@dt?=?’2008-09-10?07:15:30.123456′; select?extract(year?from?@dt);?—?2008 select?extract(quarter?from?@dt);?—?3 select?extract(month?from?@dt);?—?9 select?extract(week?from?@dt);?—?36 select?extract(day?from?@dt);?—?10 select?extract(hour?from?@dt);?—?7 select?extract(minute?from?@dt);?—?15 select?extract(second?from?@dt);?—?30 select?extract(microsecond?from?@dt);?—?123456select?extract(year_month?from?@dt);?—?200809 select?extract(day_hour?from?@dt);?—?1007 select?extract(day_minute?from?@dt);?—?100715 select?extract(day_second?from?@dt);?—?10071530 select?extract(day_microsecond?from?@dt);?—?10071530123456 select?extract(hour_minute?from?@dt);?—?715 select?extract(hour_second?from?@dt);?—?71530 select?extract(hour_microsecond?from?@dt);?—?71530123456 select?extract(minute_second?from?@dt);?—?1530 select?extract(minute_microsecond?from?@dt);?—?1530123456 select?extract(second_microsecond?from?@dt);?—?30123456
MySQL?Extract()?函數除了沒有date(),time()?的功能外,其他功能一應具全。并且還具有選取‘day_microsecond’?等功能。注意這里不是只選取?day?和?microsecond,而是從日期的?day?部分一直選取到?microsecond?部分。夠強悍的吧!
MySQL?Extract()?函數唯一不好的地方在于:你需要多敲幾次鍵盤。
3.?MySQL?dayof…?函數:dayofweek(),?dayofmonth(),?dayofyear()
分別返回日期參數,在一周、一月、一年中的位置。?
set?@dt?=?’2008-08-08′; select?dayofweek(@dt);?—?6 select?dayofmonth(@dt);?—?8 select?dayofyear(@dt);?—?221
日期?‘2008-08-08′?是一周中的第?6?天(1?=?Sunday,?2?=?Monday,?…,?7?=?Saturday);一月中的第?8?天;一年中的第?221?天。
4.?MySQL?week…?函數:week(),?weekofyear(),?dayofweek(),?weekday(),?yearweek()
set?@dt?=?’2008-08-08′; select?week(@dt);?—?31 select?week(@dt,3);?—?32 select?weekofyear(@dt);?—?32 select?dayofweek(@dt);?—?6 select?weekday(@dt);?—?4 select?yearweek(@dt);?—?200831
MySQL?week()?函數,可以有兩個參數,具體可看手冊。?weekofyear()?和?week()?一樣,都是計算“某天”是位于一年中的第幾周。?weekofyear(@dt)?等價于?week(@dt,3)。
MySQL?weekday()?函數和?dayofweek()?類似,都是返回“某天”在一周中的位置。不同點在于參考的標準,?weekday:(0?=?Monday,?1?=?Tuesday,?…,?6?=?Sunday);?dayofweek:(1?=?Sunday,?2?=?Monday,?…,?7?=?Saturday)
MySQL?yearweek()?函數,返回?year(2008)?+?week?位置(31)。
5.?MySQL?返回星期和月份名稱函數:dayname(),?monthname()
set?@dt?=?’2008-08-08′; select?dayname(@dt);?—?Friday select?monthname(@dt);?—?August
思考,如何返回中文的名稱呢?
6.?MySQL?last_day()?函數:返回月份中的最后一天。
select?last_day(’2008-02-01′);?—?2008-02-29 select?last_day(’2008-08-08′);?—?2008-08-31
MySQL?last_day()?函數非常有用,比如我想得到當前月份中有多少天,可以這樣來計算:
mysql>?select?now(),?day(last_day(now()))?as?days; +———————+——+ |?now()?|?days?| +———————+——+ |?2013-04-08?21:03:14?|?30?| +———————+——+
MySQL?日期時間計算函數
1.?MySQL?為日期增加一個時間間隔:date_add()
set?@dt?=?now(); select?date_add(@dt,?interval?1?day);?—?add?1?day select?date_add(@dt,?interval?1?hour);?—?add?1?hour select?date_add(@dt,?interval?1?minute);?—?… select?date_add(@dt,?interval?1?second); select?date_add(@dt,?interval?1?microsecond); select?date_add(@dt,?interval?1?week); select?date_add(@dt,?interval?1?month); select?date_add(@dt,?interval?1?quarter); select?date_add(@dt,?interval?1?year); select?date_add(@dt,?interval?-1?day);?—?sub?1?day
MySQL?adddate(),?addtime()函數,可以用?date_add()?來替代。下面是?date_add()?實現?addtime()?功能示例:
mysql>?set?@dt?=?’2008-08-09?12:12:33′; mysql> mysql>?select?date_add(@dt,?interval?’01:15:30′?hour_second); +——————————————+ |?date_add(@dt,?interval?’01:15:30′?hour_second)?| +——————————————+ |?2008-08-09?13:28:03?| +——————————————+ mysql>?select?date_add(@dt,?interval?’1?01:15:30′?day_second); +——————————————+ |?date_add(@dt,?interval?’1?01:15:30′?day_second)?| +——————————————+ |?2008-08-10?13:28:03?| +——————————————+
date_add()?函數,分別為?@dt?增加了“1小時?15分?30秒”?和?“1天?1小時?15分?30秒”。建議:總是使用?date_add()?日期時間函數來替代?adddate(),?addtime()。
2.?MySQL?為日期減去一個時間間隔:date_sub()
mysql>?select?date_sub(’1998-01-01?00:00:00′,?interval?’1?1:1:1′?day_second); +——————————————+ |?date_sub(’1998-01-01?00:00:00′,?interval?’1?1:1:1′?day_second)?| +——————————————+ |?1997-12-30?22:58:59?| +——————————————+
MySQL?date_sub()?日期時間函數?和?date_add()?用法一致,不再贅述。另外,MySQL?中還有兩個函數?subdate(),?subtime(),建議,用?date_sub()?來替代。
3.?MySQL?另類日期函數:period_add(P,N),?period_diff(P1,P2)
函數參數“P”?的格式為“YYYYMM”?或者?“YYMM”,第二個參數“N”?表示增加或減去?N?month(月)。
MySQL?period_add(P,N):日期加/減去N月。
mysql>?select?period_add(200808,2),?period_add(20080808,-2) +——————————————+ |?period_add(200808,2)?|?period_add(20080808,-2)?| +——————————————+ |?200810?|?20080806?| +——————————————+ MySQL?period_diff(P1,P2):日期?P1-P2,返回?N?個月。 mysql>?select?period_diff(200808,?200801); +——————————————+ |?period_diff(200808,?200801)?| +——————————————+ |?7?| +——————————————+
在?MySQL?中,這兩個日期函數,一般情況下很少用到。
4.?MySQL?日期、時間相減函數:datediff(date1,date2),?timediff(time1,time2)
MySQL?datediff(date1,date2):兩個日期相減?date1?–?date2,返回天數。 select?datediff(’2008-08-08′,?’2008-08-01′);?—?7 select?datediff(’2008-08-01′,?’2008-08-08′);?—?-7 MySQL?timediff(time1,time2):兩個日期相減?time1?–?time2,返回?time?差值。 select?timediff(’2008-08-08?08:08:08′,?’2008-08-08?00:00:00′);?—?08:08:08 select?timediff(’08:08:08′,?’00:00:00′);?—?08:08:08
注意:timediff(time1,time2)?函數的兩個參數類型必須相同。
MySQL?日期轉換函數、時間轉換函數
1.?MySQL?(時間、秒)轉換函數:time_to_sec(time),?sec_to_time(seconds)
select?time_to_sec(’01:00:05′);?—?3605 select?sec_to_time(3605);?—?’01:00:05′
2.?MySQL?(日期、天數)轉換函數:to_days(date),?from_days(days)
select?to_days(’0000-00-00′);?—?0 select?to_days(’2008-08-08′);?—?733627 select?from_days(0);?—?’0000-00-00′ select?from_days(733627);?—?’2008-08-08′
3.?MySQL?Str?to?Date?(字符串轉換為日期)函數:str_to_date(str,?format)
select?str_to_date(’08/09/2008′,?‘%m/%d/%Y’);?—?2008-08-09 select?str_to_date(’08/09/08′?,?‘%m/%d/%y’);?—?2008-08-09 select?str_to_date(’08.09.2008′,?‘%m.%d.%Y’);?—?2008-08-09 select?str_to_date(’08:09:30′,?‘%h:%i:%s’);?—?08:09:30 select?str_to_date(’08.09.2008?08:09:30′,?‘%m.%d.%Y?%h:%i:%s’);?—?2008-08-09?08:09:30
可以看到,str_to_date(str,format)?轉換函數,可以把一些雜亂無章的字符串轉換為日期格式。另外,它也可以轉換為時間。“format”?可以參看?MySQL?手冊。
4.?MySQL?Date/Time?to?Str(日期/時間轉換為字符串)函數:date_format(date,format),?time_format(time,format)
mysql>?select?date_format(’2008-08-08?22:23:00′,?‘%W?%M?%Y’); +——————————————+ |?date_format(’2008-08-08?22:23:00′,?‘%W?%M?%Y’)?| +——————————————+ |?Friday?August?2008?| +——————————————+ mysql>?select?date_format(’2008-08-08?22:23:01′,?‘%Y%m%d%H%i%s’); +——————————————+ |?date_format(’2008-08-08?22:23:01′,?‘%Y%m%d%H%i%s’)?| +——————————————+ |?20080808222301?| +——————————————+ mysql>?select?time_format(’22:23:01′,?‘%H.%i.%s’); +——————————————+ |?time_format(’22:23:01′,?‘%H.%i.%s’)?| +——————————————+ |?22.23.01?| +——————————————+
MySQL?日期、時間轉換函數:date_format(date,format),?time_format(time,format)?能夠把一個日期/時間轉換成各種各樣的字符串格式。它是?str_to_date(str,format)?函數的?一個逆轉換。
5.?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?get_format()?函數在實際中用到機會的比較少。
6.?MySQL?拼湊日期、時間函數:makdedate(year,dayofyear),?maketime(hour,minute,second)
select?makedate(2001,31);?—?’2001-01-31′ select?makedate(2001,32);?—?’2001-02-01′ select?maketime(12,15,30);?—?’12:15:30′
MySQL?時間戳(Timestamp)函數
1.?MySQL?獲得當前時間戳函數:current_timestamp,?current_timestamp()
mysql>?select?current_timestamp,?current_timestamp(); +——————————————+ |?current_timestamp?|?current_timestamp()?| +——————————————+ |?2008-08-09?23:22:24?|?2008-08-09?23:22:24?| +——————————————+
2.?MySQL?(unix?時間戳、日期)轉換函數:
unix_timestamp(), unix_timestamp(date), from_unixtime(unix_timestamp), from_unixtime(unix_timestamp,format)
下面是示例:
select?unix_timestamp();?—?1218290027 select?unix_timestamp(’2008-08-08′);?—?1218124800 select?unix_timestamp(’2008-08-08?12:30:00′);?—?1218169800 select?from_unixtime(1218290027);?—?’2008-08-09?21:53:47′ select?from_unixtime(1218124800);?—?’2008-08-08?00:00:00′ select?from_unixtime(1218169800);?—?’2008-08-08?12:30:00′ select?from_unixtime(1218169800,?‘%Y?%D?%M?%h:%i:%s?%x’);?—?’2008?8th?August?12:30:00?2008′
3.?MySQL?時間戳(timestamp)轉換、增、減函數:
timestamp(date)?—?date?to?timestamp timestamp(dt,time)?—?dt?+?time timestampadd(unit,interval,datetime_expr)?– timestampdiff(unit,datetime_expr1,datetime_expr2)?–
請看示例部分:
select?timestamp(’2008-08-08′);?—?2008-08-08?00:00:00 select?timestamp(’2008-08-08?08:00:00′,?’01:01:01′);?—?2008-08-08?09:01:01 select?timestamp(’2008-08-08?08:00:00′,?’10?01:01:01′);?—?2008-08-18?09:01:01 select?timestampadd(day,?1,?’2008-08-08?08:00:00′);?—?2008-08-09?08:00:00 select?date_add(’2008-08-08?08:00:00′,?interval?1?day);?—?2008-08-09?08:00:00 MySQL?timestampadd()?函數類似于?date_add()。 select?timestampdiff(year,’2002-05-01′,’2001-01-01′);?—?-1 select?timestampdiff(day?,’2002-05-01′,’2001-01-01′);?—?-485 select?timestampdiff(hour,’2008-08-08?12:00:00′,’2008-08-08?00:00:00′);?—?-12 select?datediff(’2008-08-08?12:00:00′,?’2008-08-01?00:00:00′);?—?7 MySQL?timestampdiff()?函數就比?datediff()?功能強多了,datediff()?只能計算兩個日期(date)之間相差的天數。
MySQL?timestampdiff()?函數就比?datediff()?功能強多了,datediff()?只能計算兩個日期(date)之間相差的天數。
MySQL?時區(timezone)轉換函數convert_tz(dt,from_tz,to_tz)
select?convert_tz(’2008-08-08?12:00:00′,?‘+08:00′,?‘+00:00′);?—?2008-08-08?04:00:00 時區轉換也可以通過?date_add,?date_sub,?timestampadd?來實現。 select?date_add(’2008-08-08?12:00:00′,?interval?-8?hour);?—?2008-08-08?04:00:00 select?date_sub(’2008-08-08?12:00:00′,?interval?8?hour);?—?2008-08-08?04:00:00 select?timestampadd(hour,?-8,?’2008-08-08?12:00:00′);?—?2008-08-08?04:00:00
相關學習推薦:mysql教程(視頻)