Mysql日期和时间函数
轉(zhuǎn)載自:http://fanqiang.chinaunix.net/a2/b1/20010705/150000802.html
對于每個類型擁有的值范圍以及并且指定日期何時間值的有效格式的描述見7.3.6?日期和時間類型。??
這里是一個使用日期函數(shù)的例子。下面的查詢選擇了所有記錄,其date_col的值是在最后30天以內(nèi):??
mysql>?SELECT?something?FROM?table??
WHERE?TO_DAYS(NOW())?-?TO_DAYS(date_col)?<=?30;??
DAYOFWEEK(date)??
返回日期date的星期索引(1=星期天,2=星期一,?……7=星期六)。這些索引值對應(yīng)于ODBC標(biāo)準(zhǔn)。??
mysql>?select?DAYOFWEEK('1998-02-03');??
->?3??
WEEKDAY(date)??
返回date的星期索引(0=星期一,1=星期二,?……6=?星期天)。??
mysql>?select?WEEKDAY('1997-10-04?22:23:00');??
->?5??
mysql>?select?WEEKDAY('1997-11-05');??
->?2??
DAYOFMONTH(date)??
返回date的月份中日期,在1到31范圍內(nèi)。??
mysql>?select?DAYOFMONTH('1998-02-03');??
->?3??
DAYOFYEAR(date)??
返回date在一年中的日數(shù),?在1到366范圍內(nèi)。??
mysql>?select?DAYOFYEAR('1998-02-03');??
->?34??
MONTH(date)??
返回date的月份,范圍1到12。??
mysql>?select?MONTH('1998-02-03');??
->?2??
DAYNAME(date)??
返回date的星期名字。??
mysql>?select?DAYNAME("1998-02-05");??
->?'Thursday'??
MONTHNAME(date)??
返回date的月份名字。??
mysql>?select?MONTHNAME("1998-02-05");??
->?'February'??
QUARTER(date)??
返回date一年中的季度,范圍1到4。??
mysql>?select?QUARTER('98-04-01');??
->?2??
WEEK(date)??
??
WEEK(date,first)??
對于星期天是一周的第一天的地方,有一個單個參數(shù),返回date的周數(shù),范圍在0到52。2個參數(shù)形式WEEK()允許?
你指定星期是否開始于星期天或星期一。如果第二個參數(shù)是0,星期從星期天開始,如果第二個參數(shù)是1,?
從星期一開始。??
mysql>?select?WEEK('1998-02-20');??
->?7??
mysql>?select?WEEK('1998-02-20',0);??
->?7??
mysql>?select?WEEK('1998-02-20',1);??
->?8??
YEAR(date)??
返回date的年份,范圍在1000到9999。??
mysql>?select?YEAR('98-02-03');??
->?1998??
HOUR(time)??
返回time的小時,范圍是0到23。??
mysql>?select?HOUR('10:05:03');??
->?10??
MINUTE(time)??
返回time的分鐘,范圍是0到59。??
mysql>?select?MINUTE('98-02-03?10:05:03');??
->?5??
SECOND(time)??
回來time的秒數(shù),范圍是0到59。??
mysql>?select?SECOND('10:05:03');??
->?3??
PERIOD_ADD(P,N)??
增加N個月到階段P(以格式Y(jié)YMM或YYYYMM)。以格式Y(jié)YYYMM返回值。注意階段參數(shù)P不是日期值。??
mysql>?select?PERIOD_ADD(9801,2);??
->?199803??
PERIOD_DIFF(P1,P2)??
返回在時期P1和P2之間月數(shù),P1和P2應(yīng)該以格式Y(jié)YMM或YYYYMM。注意,時期參數(shù)P1和P2不是日期值。??
mysql>?select?PERIOD_DIFF(9802,199703);??
->?11??
DATE_ADD(date,INTERVAL?expr?type)??
??
DATE_SUB(date,INTERVAL?expr?type)??
??
ADDDATE(date,INTERVAL?expr?type)??
??
SUBDATE(date,INTERVAL?expr?type)??
這些功能執(zhí)行日期運算。對于MySQL?3.22,他們是新的。ADDDATE()和SUBDATE()是DATE_ADD()和DATE_SUB()的同義詞。?
在MySQL?3.23中,你可以使用+和-而不是DATE_ADD()和DATE_SUB()。(見例子)date是一個指定開始日期的?
DATETIME或DATE值,expr是指定加到開始日期或從開始日期減去的間隔值一個表達(dá)式,expr是一個字符串;它可以以?
一個“-”開始表示負(fù)間隔。type是一個關(guān)鍵詞,指明表達(dá)式應(yīng)該如何被解釋。EXTRACT(type?FROM?date)函數(shù)從日期?
中返回“type”間隔。下表顯示了type和expr參數(shù)怎樣被關(guān)聯(lián):?type值?含義?期望的expr格式??
SECOND?秒?SECONDS??
MINUTE?分鐘?MINUTES??
HOUR?時間?HOURS??
DAY?天?DAYS??
MONTH?月?MONTHS??
YEAR?年?YEARS??
MINUTE_SECOND?分鐘和秒?"MINUTES:SECONDS"??
HOUR_MINUTE?小時和分鐘?"HOURS:MINUTES"??
DAY_HOUR?天和小時?"DAYS?HOURS"??
YEAR_MONTH?年和月?"YEARS-MONTHS"??
HOUR_SECOND?小時,?分鐘,?"HOURS:MINUTES:SECONDS"??
DAY_MINUTE?天,?小時,?分鐘?"DAYS?HOURS:MINUTES"??
DAY_SECOND?天,?小時,?分鐘,?秒?"DAYS?HOURS:MINUTES:SECONDS"??
MySQL在expr格式中允許任何標(biāo)點分隔符。表示顯示的是建議的分隔符。如果date參數(shù)是一個DATE值并且你的計算僅僅?
包含YEAR、MONTH和DAY部分(即,沒有時間部分),結(jié)果是一個DATE值。否則結(jié)果是一個DATETIME值。??
mysql>?SELECT?"1997-12-31?23:59:59"?+?INTERVAL?1?SECOND;??
->?1998-01-01?00:00:00??
mysql>?SELECT?INTERVAL?1?DAY?+?"1997-12-31";??
->?1998-01-01??
mysql>?SELECT?"1998-01-01"?-?INTERVAL?1?SECOND;??
->?1997-12-31?23:59:59??
mysql>?SELECT?DATE_ADD("1997-12-31?23:59:59",??
INTERVAL?1?SECOND);??
->?1998-01-01?00:00:00??
mysql>?SELECT?DATE_ADD("1997-12-31?23:59:59",??
INTERVAL?1?DAY);??
->?1998-01-01?23:59:59??
mysql>?SELECT?DATE_ADD("1997-12-31?23:59:59",??
INTERVAL?"1:1"?MINUTE_SECOND);??
->?1998-01-01?00:01:00??
mysql>?SELECT?DATE_SUB("1998-01-01?00:00:00",??
INTERVAL?"1?1:1:1"?DAY_SECOND);??
->?1997-12-30?22:58:59??
mysql>?SELECT?DATE_ADD("1998-01-01?00:00:00",??
INTERVAL?"-1?10"?DAY_HOUR);??
->?1997-12-30?14:00:00??
mysql>?SELECT?DATE_SUB("1998-01-02",?INTERVAL?31?DAY);??
->?1997-12-02??
mysql>?SELECT?EXTRACT(YEAR?FROM?"1999-07-02");??
->?1999??
mysql>?SELECT?EXTRACT(YEAR_MONTH?FROM?"1999-07-02?01:02:03");??
->?199907??
mysql>?SELECT?EXTRACT(DAY_MINUTE?FROM?"1999-07-02?01:02:03");??
->?20102??
如果你指定太短的間隔值(不包括type關(guān)鍵詞期望的間隔部分),MySQL假設(shè)你省掉了間隔值的最左面部分。例如,?
如果你指定一個type是DAY_SECOND,值expr被希望有天、小時、分鐘和秒部分。如果你象"1:10"這樣指定值,?
MySQL假設(shè)日子和小時部分是丟失的并且值代表分鐘和秒。換句話說,"1:10"?DAY_SECOND以它等價于"1:10"?MINUTE_SECOND?
的方式解釋,這對那MySQL解釋TIME值表示經(jīng)過的時間而非作為一天的時間的方式有二義性。如果你使用確實不正確的日期,?
結(jié)果是NULL。如果你增加MONTH、YEAR_MONTH或YEAR并且結(jié)果日期大于新月份的最大值天數(shù),日子在新月用最大的天調(diào)整。??
mysql>?select?DATE_ADD('1998-01-30',?Interval?1?month);??
->?1998-02-28??
注意,從前面的例子中詞INTERVAL和type關(guān)鍵詞不是區(qū)分大小寫的。??
TO_DAYS(date)??
給出一個日期date,返回一個天數(shù)(從0年的天數(shù))。??
mysql>?select?TO_DAYS(950501);??
->?728779??
mysql>?select?TO_DAYS('1997-10-07');??
->?729669??
TO_DAYS()不打算用于使用格列高里歷(1582)出現(xiàn)前的值。??
FROM_DAYS(N)??
給出一個天數(shù)N,返回一個DATE值。??
mysql>?select?FROM_DAYS(729669);??
->?'1997-10-07'??
TO_DAYS()不打算用于使用格列高里歷(1582)出現(xiàn)前的值。??
DATE_FORMAT(date,format)??
根據(jù)format字符串格式化date值。下列修飾符可以被用在format字符串中:?%M?月名字(January……December)??
%W?星期名字(Sunday……Saturday)??
%D?有英語前綴的月份的日期(1st,?2nd,?3rd,?等等。)??
%Y?年,?數(shù)字,?4?位??
%y?年,?數(shù)字,?2?位??
%a?縮寫的星期名字(Sun……Sat)??
%d?月份中的天數(shù),?數(shù)字(00……31)??
%e?月份中的天數(shù),?數(shù)字(0……31)??
%m?月,?數(shù)字(01……12)??
%c?月,?數(shù)字(1……12)??
%b?縮寫的月份名字(Jan……Dec)??
%j?一年中的天數(shù)(001……366)??
%H?小時(00……23)??
%k?小時(0……23)??
%h?小時(01……12)??
%I?小時(01……12)??
%l?小時(1……12)??
%i?分鐘,?數(shù)字(00……59)??
%r?時間,12?小時(hh:mm:ss?[AP]M)??
%T?時間,24?小時(hh:mm:ss)??
%S?秒(00……59)??
%s?秒(00……59)??
%p?AM或PM??
%w?一個星期中的天數(shù)(0=Sunday?……6=Saturday?)??
%U?星期(0……52),?這里星期天是星期的第一天??
%u?星期(0……52),?這里星期一是星期的第一天??
%%?一個文字“%”。??
所有的其他字符不做解釋被復(fù)制到結(jié)果中。??
mysql>?select?DATE_FORMAT('1997-10-04?22:23:00',?'%W?%M?%Y');??
->?'Saturday?October?1997'??
mysql>?select?DATE_FORMAT('1997-10-04?22:23:00',?'%H:%i:%s');??
->?'22:23:00'??
mysql>?select?DATE_FORMAT('1997-10-04?22:23:00',??
'%D?%y?%a?%d?%m?%b?%j');??
->?'4th?97?Sat?04?10?Oct?277'??
mysql>?select?DATE_FORMAT('1997-10-04?22:23:00',??
'%H?%k?%I?%r?%T?%S?%w');??
->?'22?22?10?10:23:00?PM?22:23:00?00?6'??
MySQL3.23中,在格式修飾符字符前需要%。在MySQL更早的版本中,%是可選的。??
TIME_FORMAT(time,format)??
這象上面的DATE_FORMAT()函數(shù)一樣使用,但是format字符串只能包含處理小時、分鐘和秒的那些格式修飾符。?
其他修飾符產(chǎn)生一個NULL值或0。??
CURDATE()??
??
CURRENT_DATE??
以'YYYY-MM-DD'或YYYYMMDD格式返回今天日期值,取決于函數(shù)是在一個字符串還是數(shù)字上下文被使用。??
mysql>?select?CURDATE();??
->?'1997-12-15'??
mysql>?select?CURDATE()?+?0;??
->?19971215??
CURTIME()??
??
CURRENT_TIME??
以'HH:MM:SS'或HHMMSS格式返回當(dāng)前時間值,取決于函數(shù)是在一個字符串還是在數(shù)字的上下文被使用。??
mysql>?select?CURTIME();??
->?'23:50:26'??
mysql>?select?CURTIME()?+?0;??
->?235026??
NOW()??
??
SYSDATE()??
??
CURRENT_TIMESTAMP??
以'YYYY-MM-DD?HH:MM:SS'或YYYYMMDDHHMMSS格式返回當(dāng)前的日期和時間,取決于函數(shù)是在一個字符串還是在數(shù)字的?
上下文被使用。??
mysql>?select?NOW();??
->?'1997-12-15?23:50:26'??
mysql>?select?NOW()?+?0;??
->?19971215235026??
UNIX_TIMESTAMP()??
??
UNIX_TIMESTAMP(date)??
如果沒有參數(shù)調(diào)用,返回一個Unix時間戳記(從'1970-01-01?00:00:00'GMT開始的秒數(shù))。如果UNIX_TIMESTAMP()用一?
個date參數(shù)被調(diào)用,它返回從'1970-01-01?00:00:00'?GMT開始的秒數(shù)值。date可以是一個DATE字符串、一個DATETIME?
字符串、一個TIMESTAMP或以YYMMDD或YYYYMMDD格式的本地時間的一個數(shù)字。??
mysql>?select?UNIX_TIMESTAMP();??
->?882226357??
mysql>?select?UNIX_TIMESTAMP('1997-10-04?22:23:00');??
->?875996580??
當(dāng)UNIX_TIMESTAMP被用于一個TIMESTAMP列,函數(shù)將直接接受值,沒有隱含的“string-to-unix-timestamp”變換。??
FROM_UNIXTIME(unix_timestamp)??
以'YYYY-MM-DD?HH:MM:SS'或YYYYMMDDHHMMSS格式返回unix_timestamp參數(shù)所表示的值,取決于函數(shù)是在一個字符串?
還是或數(shù)字上下文中被使用。??
mysql>?select?FROM_UNIXTIME(875996580);??
->?'1997-10-04?22:23:00'??
mysql>?select?FROM_UNIXTIME(875996580)?+?0;??
->?19971004222300??
FROM_UNIXTIME(unix_timestamp,format)??
返回表示?Unix?時間標(biāo)記的一個字符串,根據(jù)format字符串格式化。format可以包含與DATE_FORMAT()函數(shù)列出的條?
目同樣的修飾符。??
mysql>?select?FROM_UNIXTIME(UNIX_TIMESTAMP(),??
'%Y?%D?%M?%h:%i:%s?%x');??
->?'1997?23rd?December?03:43:30?x'??
SEC_TO_TIME(seconds)??
返回seconds參數(shù),變換成小時、分鐘和秒,值以'HH:MM:SS'或HHMMSS格式化,取決于函數(shù)是在一個字符串還是在數(shù)字?
上下文中被使用。??
mysql>?select?SEC_TO_TIME(2378);??
->?'00:39:38'??
mysql>?select?SEC_TO_TIME(2378)?+?0;??
->?3938??
TIME_TO_SEC(time)??
返回time參數(shù),轉(zhuǎn)換成秒。??
mysql>?select?TIME_TO_SEC('22:23:00');??
->?80580??
mysql>?select?TIME_TO_SEC('00:39:38');??
->?2378?
總結(jié)
以上是生活随笔為你收集整理的Mysql日期和时间函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 029--PM话术模板
- 下一篇: 从如何优化SQL入手,提高数据仓库的ET