若你指定了一個過于短的時間間隔值 (不包括type 關(guān)鍵詞所預(yù)期的所有時間間隔部分), MySQL 假定你已經(jīng)省去了時間間隔值的最左部分。 例如,你指定了一種類型的DAY_SECOND, expr 的值預(yù)期應(yīng)當(dāng)具有天、 小時、分鐘和秒部分。若你指定了一個類似 '1:10'的值, MySQL 假定天和小時部分不存在,那么這個值代表分和秒。換言之, '1:10' DAY_SECOND 被解釋為相當(dāng)于 '1:10' MINUTE_SECOND。這相當(dāng)于 MySQL將TIME 值解釋為所耗費的時間而不是日時的解釋方式。
假如你對一個日期值添加或減去一些含有時間部分的內(nèi)容,則結(jié)果自動轉(zhuǎn)化為一個日期時間值:
mysql> SELECT DATE_ADD('1999-01-01', INTERVAL 1 DAY);-> '1999-01-02'mysql> SELECT DATE_ADD('1999-01-01', INTERVAL 1 HOUR);-> '1999-01-01 01:00:00'
假如你使用了格式嚴(yán)重錯誤的日期,則結(jié)果為 NULL。假如你添加了 MONTH、YEAR_MONTH或YEAR ,而結(jié)果日期中有一天的日期大于添加的月份的日期最大限度,則這個日期自動被調(diào)整為添加月份的最大日期:
mysql> SELECT DATE_ADD('1998-01-30', INTERVAL 1 MONTH);-> '1998-02-28'
◆ DATE_FORMAT(date,format)
根據(jù)format 字符串安排date 值的格式。
以下說明符可用在 format 字符串中:
說明符
說明
%a
工作日的縮寫名稱 (Sun..Sat)
%b
月份的縮寫名稱 (Jan..Dec)
%c
月份,數(shù)字形式(0..12)
%D
帶有英語后綴的該月日期 (0th, 1st, 2nd, 3rd, ...)
%d
該月日期, 數(shù)字形式 (00..31)
%e
該月日期, 數(shù)字形式(0..31)
%f
微秒 (000000..999999)
%H
小時(00..23)
%h
小時(01..12)
%I
小時 (01..12)
%i
分鐘,數(shù)字形式 (00..59)
%j
一年中的天數(shù) (001..366)
%k
小時 (0..23)
%l
小時 (1..12)
%M
月份名稱 (January..December)
%m
月份, 數(shù)字形式 (00..12)
%p
上午(AM)或下午( PM)
%r
時間 , 12小時制 (小時hh:分鐘mm:秒數(shù)ss 后加 AM或PM)
%S
秒 (00..59)
%s
秒 (00..59)
%T
時間 , 24小時制 (小時hh:分鐘mm:秒數(shù)ss)
%U
周 (00..53), 其中周日為每周的第一天
%u
周 (00..53), 其中周一為每周的第一天
%V
周 (01..53), 其中周日為每周的第一天 ; 和 %X同時使用
%v
周 (01..53), 其中周一為每周的第一天 ; 和 %x同時使用
%W
工作日名稱 (周日..周六)
%w
一周中的每日 (0=周日..6=周六)
%X
該周的年份,其中周日為每周的第一天, 數(shù)字形式,4位數(shù);和%V同時使用
%x
該周的年份,其中周一為每周的第一天, 數(shù)字形式,4位數(shù);和%v同時使用
%Y
年份, 數(shù)字形式,4位數(shù)
%y
年份, 數(shù)字形式 (2位數(shù))
%%
‘%’文字字符
所有其它字符都被復(fù)制到結(jié)果中,無需作出解釋。
注意:‘%’字符要求在格式指定符之前。
月份和日期說明符的范圍從零開始,原因是 MySQL允許存儲諸如 '2004-00-00'的不完全日期.
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'mysql> SELECT DATE_FORMAT('1999-01-01', '%X %V');-> '1998 52'
◆ DAY(date)
DAY() 和DAYOFMONTH()的意義相同。
◆ DAYNAME(date)
返回date 對應(yīng)的工作日名稱。
mysql> SELECT DAYNAME('1998-02-05');-> '周四'
◆ DAYOFMONTH(date)
返回date 對應(yīng)的該月日期,范圍是從 1到31。
mysql> SELECT DAYOFMONTH('1998-02-03');-> 3
◆ DAYOFWEEK(date)
返回date (1 = 周日, 2 = 周一, ..., 7 = 周六)對應(yīng)的工作日索引。這些索引值符合 ODBC標(biāo)準(zhǔn)。
mysql> SELECT DAYOFWEEK('1998-02-03');-> 3
◆ DAYOFYEAR(date)
返回date 對應(yīng)的一年中的天數(shù),范圍是從 1到366。
mysql> SELECT DAYOFYEAR('1998-02-03');-> 34
◆ EXTRACT(type FROM date)
EXTRACT()函數(shù)所使用的時間間隔類型說明符同 DATE_ADD()或DATE_SUB()的相同,但它從日期中提取其部分,而不是執(zhí)行日期運算。
mysql> SELECT EXTRACT(YEAR FROM '1999-07-02');-> 1999mysql> SELECT EXTRACT(YEAR_MONTH FROM '1999-07-02 01:02:03');-> 199907mysql> SELECT EXTRACT(DAY_MINUTE FROM '1999-07-02 01:02:03');-> 20102mysql> SELECT EXTRACT(MICROSECOND-> FROM '2003-01-02 10:30:00.00123');-> 123
◆ FROM_DAYS(N)
給定一個天數(shù) N, 返回一個DATE值。
mysql> SELECT FROM_DAYS(729669);-> '1997-10-07'
使用 FROM_DAYS()處理古老日期時,務(wù)必謹(jǐn)慎。他不用于處理陽歷出現(xiàn)前的日期(1582)。請參見12.6節(jié),“MySQL使用什么日歷?”。
◆ FROM_UNIXTIME(unix_timestamp) , FROM_UNIXTIME(unix_timestamp,format)
返回'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS 格式值的unix_timestamp參數(shù)表示,具體格式取決于該函數(shù)是否用在字符串中或是數(shù)字語境中。
若format 已經(jīng)給出,則結(jié)果的格式是根據(jù)format 字符串而定。 format 可以包含同DATE_FORMAT() 函數(shù)輸入項列表中相同的說明符。
mysql> SELECT FROM_UNIXTIME(875996580);-> '1997-10-04 22:23:00'mysql> SELECT FROM_UNIXTIME(875996580) + 0;-> 19971004222300mysql> SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(),-> '%Y %D %M %h:%i:%s %x');-> '2003 6th August 06:22:58 2003'
◆ GET_FORMAT(DATE|TIME|DATETIME, 'EUR'|'USA'|'JIS'|'ISO'|'INTERNAL')
返回一個格式字符串。這個函數(shù)在同DATE_FORMAT() 及STR_TO_DATE()函數(shù)結(jié)合時很有用。
第一個參數(shù)的3個可能值和第二個參數(shù)的5個可能值產(chǎn)生 15 個可能格式字符串 (對于使用的說明符,請參見DATE_FORMAT()函數(shù)說明表 )。
ISO 格式為ISO 9075, 而非ISO 8601.
也可以使用TIMESTAMP, 這時GET_FORMAT()的返回值和DATETIME相同。
mysql> SELECT DATE_FORMAT('2003-10-03',GET_FORMAT(DATE,'EUR'));-> '03.10.2003'mysql> SELECT STR_TO_DATE('10.31.2003',GET_FORMAT(DATE,'USA'));-> '2003-10-31'