亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

更多QQ空间微信QQ好友腾讯朋友复制链接
您的位置:首頁/技術(shù)文章
文章詳情頁

MySQL基礎(chǔ)教程9 —— 函數(shù)之日期和時(shí)間函數(shù)

【字号: 作者:豬豬瀏覽:149日期:2023-10-17 17:12:52

下面的例子使用了時(shí)間函數(shù)。以下詢問選擇了最近的30天內(nèi)所有帶有date_col值的記錄:

mysql>SELECTsomethingFROMtbl_name

->WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY) <=date_col;

注意,這個(gè)詢問也能選擇將來的日期記錄。

用于日期值的函數(shù)通常會(huì)接受時(shí)間日期值而忽略時(shí)間部分。而用于時(shí)間值的函數(shù)通常接受時(shí)間日期值而忽略日期部分。

返回各自當(dāng)前日期或時(shí)間的函數(shù)在每次詢問執(zhí)行開始時(shí)計(jì)算一次。這意味著在一個(gè)單一詢問中,對(duì)諸如NOW()的函數(shù)多次訪問總是會(huì)得到同樣的結(jié)果(未達(dá)到我們的目的,單一詢問也包括對(duì)存儲(chǔ)程序或觸發(fā)器和被該程序/觸發(fā)器調(diào)用的所有子程序的調(diào)用)。這項(xiàng)原則也適用于CURDATE()、CURTIME()、UTC_DATE()、UTC_TIME()、UTC_TIMESTAMP(),以及所有和它們意義相同的函數(shù)。

CURRENT_TIMESTAMP()、CURRENT_TIME()、CURRENT_DATE()以及FROM_UNIXTIME()函數(shù)返回連接當(dāng)前時(shí)區(qū)內(nèi)的值,這個(gè)值可用作time_zone系統(tǒng)變量的值。此外,UNIX_TIMESTAMP()假設(shè)其參數(shù)為一個(gè)當(dāng)前時(shí)區(qū)的時(shí)間日期值。

以下函數(shù)的論述中返回值的范圍會(huì)請(qǐng)求完全日期。 若一個(gè)日期為“零” 值,或者是一個(gè)諸如’2001-11-00’之類的不完全日期, 提取部分日期值的函數(shù)可能會(huì)返回0。 例如,DAYOFMONTH(’2001-11-00’)會(huì)返回0。

ADDDATE(date,INTERVALexprtype) ADDDATE(expr,days)

當(dāng)被第二個(gè)參數(shù)的INTERVAL格式激活后,ADDDATE()就是DATE_ADD()的同義詞。相關(guān)函數(shù)SUBDATE()則是DATE_SUB()的同義詞。對(duì)于INTERVAL參數(shù)上的信息 ,請(qǐng)參見關(guān)于DATE_ADD()的論述。

mysql>SELECT DATE_ADD(’1998-01-02’, INTERVAL 31 DAY);

-> ’1998-02-02’

mysql>SELECT ADDDATE(’1998-01-02’, INTERVAL 31 DAY);

-> ’1998-02-02’

若days參數(shù)只是整數(shù)值,則MySQL 5.1將其作為天數(shù)值添加至expr。

mysql>SELECT ADDDATE(’1998-01-02’, 31);

-> ’1998-02-02’

ADDTIME(expr,expr2)

ADDTIME()將expr2添加至expr然后返回結(jié)果。expr是一個(gè)時(shí)間或時(shí)間日期表達(dá)式,而expr2是一個(gè)時(shí)間表達(dá)式。

mysql>SELECT ADDTIME(’1997-12-31 23:59:59.999999’,

-> ’1 1:1:1.000002’);

-> ’1998-01-02 01:01:01.000001’

mysql>SELECT ADDTIME(’01:00:00.999999’, ’02:00:00.999998’);

-> ’03:00:01.999997’

CONVERT_TZ(dt,from_tz,to_tz)

CONVERT_TZ()將時(shí)間日期值dt從from_tz給出的時(shí)區(qū)轉(zhuǎn)到to_tz給出的時(shí)區(qū),然后返回結(jié)果值。若自變量無效,則這個(gè)函數(shù)會(huì)返回NULL。

在從若from_tz到UTC的轉(zhuǎn)化過程中,該值超出TIMESTAMP類型的被支持范圍,那么轉(zhuǎn)化不會(huì)發(fā)生。

mysql>SELECT CONVERT_TZ(’2004-01-01 12:00:00’,’GMT’,’MET’);

-> ’2004-01-01 13:00:00’

mysql>SELECT CONVERT_TZ(’2004-01-01 12:00:00’,’+00:00’,’+10:00’);

-> ’2004-01-01 22:00:00’

注釋:若要使用諸如’MET’或’Europe/Moscow’之類的指定時(shí)間區(qū),首先要設(shè)置正確的時(shí)區(qū)表。

CURDATE()

將當(dāng)前日期按照’YYYY-MM-DD’或YYYYMMDD格式的值返回,具體格式根據(jù)函數(shù)用在字符串或是數(shù)字語境中而定。

mysql>SELECT CURDATE();

-> ’1997-12-15’

mysql>SELECT CURDATE() + 0;

-> 19971215

CURRENT_DATE CURRENT_DATE()

CURRENT_DATE和CURRENT_DATE()是的同義詞.

CURTIME()

將當(dāng)前時(shí)間以’HH:MM:SS’或HHMMSS的格式返回, 具體格式根據(jù)函數(shù)用在字符串或是數(shù)字語境中而定。

mysql>SELECT CURTIME();

-> ’23:50:26’

mysql>SELECT CURTIME() + 0;

-> 235026

CURRENT_TIME, CURRENT_TIME()

CURRENT_TIME和CURRENT_TIME()是CURTIME()的同義詞。

CURRENT_TIMESTAMP, CURRENT_TIMESTAMP()

CURRENT_TIMESTAMP和CURRENT_TIMESTAMP()是NOW()的同義詞。

DATE(expr)

提取日期或時(shí)間日期表達(dá)式expr中的日期部分。

mysql>SELECT DATE(’2003-12-31 01:02:03’);

-> ’2003-12-31’

DATEDIFF(expr,expr2)

DATEDIFF()返回起始時(shí)間expr和結(jié)束時(shí)間expr2之間的天數(shù)。Expr和expr2為日期或date-and-time表達(dá)式。計(jì)算中只用到這些值的日期部分。

mysql>SELECT DATEDIFF(’1997-12-31 23:59:59’,’1997-12-30’);

-> 1

mysql>SELECT DATEDIFF(’1997-11-30 23:59:59’,’1997-12-31’);

-> -31

DATE_ADD(date,INTERVALexprtype) DATE_SUB(date,INTERVALexprtype)

這些函數(shù)執(zhí)行日期運(yùn)算。date是一個(gè)DATETIME或DATE值,用來指定起始時(shí)間。expr是一個(gè)表達(dá)式,用來指定從起始日期添加或減去的時(shí)間間隔值。Expr是一個(gè)字符串;對(duì)于負(fù)值的時(shí)間間隔,它可以以一個(gè) ‘-’開頭。type為關(guān)鍵詞,它指示了表達(dá)式被解釋的方式。

關(guān)鍵詞INTERVA及type分類符均不區(qū)分大小寫。

以下表顯示了type和expr參數(shù)的關(guān)系:

type值預(yù)期的expr格式MICROSECONDMICROSECONDSSECONDSECONDSMINUTEMINUTESHOURHOURSDAYDAYSWEEKWEEKSMONTHMONTHSQUARTERQUARTERSYEARYEARSSECOND_MICROSECOND’SECONDS.MICROSECONDS’MINUTE_MICROSECOND’MINUTES.MICROSECONDS’MINUTE_SECOND’MINUTES:SECONDS’HOUR_MICROSECOND’HOURS.MICROSECONDS’HOUR_SECOND’HOURS:MINUTES:SECONDS’HOUR_MINUTE’HOURS:MINUTES’DAY_MICROSECOND’DAYS.MICROSECONDS’DAY_SECOND’DAYS HOURS:MINUTES:SECONDS’DAY_MINUTE’DAYS HOURS:MINUTES’DAY_HOUR’DAYS HOURS’YEAR_MONTH’YEARS-MONTHS’

MySQL允許任何expr格式中的標(biāo)點(diǎn)分隔符。表中所顯示的是建議的 分隔符。若date參數(shù)是一個(gè)DATE值,而你的計(jì)算只會(huì)包括YEAR、MONTH和DAY部分(即,沒有時(shí)間部分),其結(jié)果是一個(gè)DATE值。否則,結(jié)果將是一個(gè)DATETIME值。

若位于另一端的表達(dá)式是一個(gè)日期或日期時(shí)間值 , 則INTERVALexprtype只允許在+操作符的兩端。對(duì)于 –操作符, INTERVALexprtype只允許在其右端,原因是從一個(gè)時(shí)間間隔中提取一個(gè)日期或日期時(shí)間值是毫無意義的。(見下面的例子)。

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 DATE_ADD(’1992-12-31 23:59:59.000002’,

->INTERVAL ’1.999999’ SECOND_MICROSECOND);

-> ’1993-01-01 00:00:01.000001’

若你指定了一個(gè)過于短的時(shí)間間隔值(不包括type關(guān)鍵詞所預(yù)期的所有時(shí)間間隔部分), MySQL假定你已經(jīng)省去了時(shí)間間隔值的最左部分。 例如,你指定了一種類型的DAY_SECOND,expr的值預(yù)期應(yīng)當(dāng)具有天、 小時(shí)、分鐘和秒部分。若你指定了一個(gè)類似’1:10’的值, MySQL假定天和小時(shí)部分不存在,那么這個(gè)值代表分和秒。換言之, ’1:10’ DAY_SECOND被解釋為相當(dāng)于’1:10’ MINUTE_SECOND。這相當(dāng)于MySQL將TIME值解釋為所耗費(fèi)的時(shí)間而不是日時(shí)的解釋方式。

假如你對(duì)一個(gè)日期值添加或減去一些含有時(shí)間部分的內(nèi)容,則結(jié)果自動(dòng)轉(zhuǎn)化為一個(gè)日期時(shí)間值:

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)重錯(cuò)誤的日期,則結(jié)果為NULL。假如你添加了 MONTH、YEAR_MONTH或YEAR,而結(jié)果日期中有一天的日期大于添加的月份的日期最大限度,則這個(gè)日期自動(dòng)被調(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小時(shí)(00..23)%h小時(shí)(01..12)%I小時(shí)(01..12)%i分鐘,數(shù)字形式(00..59)%j一年中的天數(shù)(001..366)%k小時(shí)(0..23)%l小時(shí)(1..12)%M月份名稱(January..December)%m月份,數(shù)字形式(00..12)%p上午(AM)或下午(PM)%r時(shí)間, 12小時(shí)制(小時(shí)hh:分鐘mm:秒數(shù)ss后加AM或PM)%S秒(00..59)%s秒(00..59)%T時(shí)間, 24小時(shí)制(小時(shí)hh:分鐘mm:秒數(shù)ss)%U周(00..53),其中周日為每周的第一天%u周(00..53),其中周一為每周的第一天%V周(01..53),其中周日為每周的第一天;和%X同時(shí)使用%v周(01..53),其中周一為每周的第一天;和%x同時(shí)使用%W工作日名稱(周日..周六)%w一周中的每日(0=周日..6=周六)%X該周的年份,其中周日為每周的第一天,數(shù)字形式,4位數(shù);和%V同時(shí)使用%x該周的年份,其中周一為每周的第一天,數(shù)字形式,4位數(shù);和%v同時(shí)使用%Y年份,數(shù)字形式,4位數(shù)%y年份,數(shù)字形式(2位數(shù))%%‘%’文字字符

所有其它字符都被復(fù)制到結(jié)果中,無需作出解釋。

注意, ‘%’字符要求在格式指定符之前。

月份和日期說明符的范圍從零開始,原因是MySQL允許存儲(chǔ)諸如’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對(duì)應(yīng)的工作日名稱。

mysql>SELECT DAYNAME(’1998-02-05’);

-> ’周四’

DAYOFMONTH(date)

返回date對(duì)應(yīng)的該月日期,范圍是從1到31。

mysql>SELECT DAYOFMONTH(’1998-02-03’);

-> 3

DAYOFWEEK(date)

返回date(1 =周日, 2 =周一, ..., 7 =周六)對(duì)應(yīng)的工作日索引。這些索引值符合ODBC標(biāo)準(zhǔn)。

mysql>SELECT DAYOFWEEK(’1998-02-03’);

-> 3

DAYOFYEAR(date)

返回date對(duì)應(yīng)的一年中的天數(shù),范圍是從1到366。

mysql>SELECT DAYOFYEAR(’1998-02-03’);

-> 34

EXTRACT(typeFROMdate)

EXTRACT()函數(shù)所使用的時(shí)間間隔類型說明符同DATE_ADD()或DATE_SUB()的相同,但它從日期中提取其部分,而不是執(zhí)行日期運(yùn)算。

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

mysql>SELECT EXTRACT(MICROSECOND

->FROM ’2003-01-02 10:30:00.00123’);

-> 123

FROM_DAYS(N)

給定一個(gè)天數(shù)N,返回一個(gè)DATE值。

mysql>SELECT FROM_DAYS(729669);

-> ’1997-10-07’

使用FROM_DAYS()處理古老日期時(shí),務(wù)必謹(jǐn)慎。他不用于處理陽歷出現(xiàn)前的日期(1582)。

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ù)輸入項(xiàng)列表中相同的說明符。

mysql>SELECT FROM_UNIXTIME(875996580);

-> ’1997-10-04 22:23:00’

mysql>SELECT FROM_UNIXTIME(875996580) + 0;

-> 19971004222300

mysql>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’)

返回一個(gè)格式字符串。這個(gè)函數(shù)在同DATE_FORMAT()及STR_TO_DATE()函數(shù)結(jié)合時(shí)很有用。

第一個(gè)參數(shù)的3個(gè)可能值和第二個(gè)參數(shù)的5個(gè)可能值產(chǎn)生15個(gè)可能格式字符串(對(duì)于使用的說明符,請(qǐng)參見DATE_FORMAT()函數(shù)說明表)。

函數(shù)調(diào)用結(jié)果GET_FORMAT(DATE,’USA’)’%m.%d.%Y’GET_FORMAT(DATE,’JIS’)’%Y-%m-%d’GET_FORMAT(DATE,’ISO’)’%Y-%m-%d’GET_FORMAT(DATE,’EUR’)’%d.%m.%Y’GET_FORMAT(DATE,’INTERNAL’)’%Y%m%d’GET_FORMAT(DATETIME,’USA’)’%Y-%m-%d-%H.%i.%s’GET_FORMAT(DATETIME,’JIS’)’%Y-%m-%d %H:%i:%s’GET_FORMAT(DATETIME,’ISO’)’%Y-%m-%d %H:%i:%s’GET_FORMAT(DATETIME,’EUR’)’%Y-%m-%d-%H.%i.%s’GET_FORMAT(DATETIME,’INTERNAL’)’%Y%m%d%H%i%s’GET_FORMAT(TIME,’USA’)’%h:%i:%s %p’GET_FORMAT(TIME,’JIS’)’%H:%i:%s’GET_FORMAT(TIME,’ISO’)’%H:%i:%s’GET_FORMAT(TIME,’EUR’)’%H.%i.%S’GET_FORMAT(TIME,’INTERNAL’)’%H%i%s’

ISO格式為ISO 9075,而非ISO 8601.

也可以使用TIMESTAMP,這時(shí)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’

HOUR(time)

返回time對(duì)應(yīng)的小時(shí)數(shù)。對(duì)于日時(shí)值的返回值范圍是從0到23。

mysql>SELECT HOUR(’10:05:03’);

-> 10

然而, TIME值的范圍實(shí)際上非常大,所以HOUR可以返回大于23的值。

mysql>SELECT HOUR(’272:59:59’);

-> 272

LAST_DAY(date)

獲取一個(gè)日期或日期時(shí)間值,返回該月最后一天對(duì)應(yīng)的值。若參數(shù)無效,則返回NULL。

mysql>SELECT LAST_DAY(’2003-02-05’);

-> ’2003-02-28’

mysql>SELECT LAST_DAY(’2004-02-05’);

-> ’2004-02-29’

mysql>SELECT LAST_DAY(’2004-01-01 01:01:01’);

-> ’2004-01-31’

mysql>SELECT LAST_DAY(’2003-03-32’);

-> NULL

LOCALTIME, LOCALTIME()

LOCALTIME及LOCALTIME()和NOW()具有相同意義。

LOCALTIMESTAMP, LOCALTIMESTAMP()

LOCALTIMESTAMP和LOCALTIMESTAMP()和NOW()具有相同意義。

MAKEDATE(year,dayofyear)

給出年份值和一年中的天數(shù)值,返回一個(gè)日期。dayofyear必須大于0,否則結(jié)果為NULL。

mysql>SELECT MAKEDATE(2001,31), MAKEDATE(2001,32);

-> ’2001-01-31’, ’2001-02-01’

mysql>SELECT MAKEDATE(2001,365), MAKEDATE(2004,365);

-> ’2001-12-31’, ’2004-12-30’

mysql>SELECT MAKEDATE(2001,0);

-> NULL

MAKETIME(hour,minute,second)

返回由hour、minute和second參數(shù)計(jì)算得出的時(shí)間值。

mysql>SELECT MAKETIME(12,15,30);

-> ’12:15:30’

MICROSECOND(expr)

從時(shí)間或日期時(shí)間表達(dá)式expr返回微秒值,其數(shù)字范圍從0到999999。

mysql>SELECT MICROSECOND(’12:00:00.123456’);

-> 123456

mysql>SELECT MICROSECOND(’1997-12-31 23:59:59.000010’);

-> 10

MINUTE(time)

返回time對(duì)應(yīng)的分鐘數(shù),范圍是從0到59。

mysql>SELECT MINUTE(’98-02-03 10:05:03’);

-> 5

MONTH(date)

返回date對(duì)應(yīng)的月份,范圍時(shí)從1到12。

mysql>SELECT MONTH(’1998-02-03’);

-> 2

MONTHNAME(date)

返回date對(duì)應(yīng)月份的全名。

mysql>SELECT MONTHNAME(’1998-02-05’);

-> ’February ’

NOW()

返回當(dāng)前日期和時(shí)間值,其格式為’YYYY-MM-DD HH:MM:SS’或YYYYMMDDHHMMSS, 具體格式取決于該函數(shù)是否用在字符串中或數(shù)字語境中。

mysql>SELECT NOW();

-> ’1997-12-15 23:50:26’

mysql>SELECT NOW() + 0;

-> 19971215235026

在一個(gè)存儲(chǔ)程序或觸發(fā)器內(nèi), NOW()返回一個(gè)常數(shù)時(shí)間,該常數(shù)指示了該程序或觸發(fā)語句開始執(zhí)行的時(shí)間。這同SYSDATE()的運(yùn)行有所不同。

PERIOD_ADD(P,N)

添加N個(gè)月至周期P(格式為YYMM或YYYYMM),返回值的格式為YYYYMM。注意周期參數(shù)P不是日期值。

mysql>SELECT PERIOD_ADD(9801,2);

-> 199803

PERIOD_DIFF(P1,P2)

返回周期P1和P2之間的月份數(shù)。P1和P2的格式應(yīng)該為YYMM或YYYYMM。注意周期參數(shù)P1和P2不是日期值。

mysql>SELECT PERIOD_DIFF(9802,199703);

-> 11

QUARTER(date)

返回date對(duì)應(yīng)的一年中的季度值,范圍是從1到4。

mysql>SELECT QUARTER(’98-04-01’);

-> 2

SECOND(time)

返回time對(duì)應(yīng)的秒數(shù),范圍是從0到59。

mysql>SELECT SECOND(’10:05:03’);

-> 3

SEC_TO_TIME(seconds)

返回被轉(zhuǎn)化為小時(shí)、 分鐘和秒數(shù)的seconds參數(shù)值,其格式為’HH:MM:SS’或HHMMSS,具體格式根據(jù)該函數(shù)是否用在字符串或數(shù)字語境中而定。

mysql>SELECT SEC_TO_TIME(2378);

-> ’00:39:38’

mysql>SELECT SEC_TO_TIME(2378) + 0;

-> 3938

STR_TO_DATE(str,format)

這是DATE_FORMAT()函數(shù)的倒轉(zhuǎn)。它獲取一個(gè)字符串str和一個(gè)格式字符串format。若格式字符串包含日期和時(shí)間部分,則STR_TO_DATE()返回一個(gè)DATETIME值, 若該字符串只包含日期部分或時(shí)間部分,則返回一個(gè)DATE或TIME值。

str所包含的日期、時(shí)間或日期時(shí)間值應(yīng)該在format指示的格式中被給定。對(duì)于可用在format中的說明符,請(qǐng)參見DATE_FORMAT()函數(shù)說明表。 所有其它的字符被逐字獲取,因此不會(huì)被解釋。若str包含一個(gè)非法日期、時(shí)間或日期時(shí)間值,則STR_TO_DATE()返回NULL。同時(shí),一個(gè)非法值會(huì)引起警告。

其意義是,例如,只要具體日期部分的范圍時(shí)從1到31之間,則允許一個(gè)日期中的具體日期部分大于一個(gè)月中天數(shù)值。并且,允許“零”日期或帶有0值部分的日期。

mysql>SELECT STR_TO_DATE(’00/00/0000’, ’%m/%d/%Y’);

-> ’0000-00-00’

mysql>SELECT STR_TO_DATE(’04/31/2004’, ’%m/%d/%Y’);

-> ’2004-04-31’

SUBDATE(date,INTERVALexprtype) SUBDATE(expr,days)

當(dāng)被第二個(gè)參數(shù)的INTERVAL型式調(diào)用時(shí), SUBDATE()和DATE_SUB()的意義相同。對(duì)于有關(guān)INTERVAL參數(shù)的信息, 見有關(guān)DATE_ADD()的討論。

mysql>SELECT DATE_SUB(’1998-01-02’, INTERVAL 31 DAY);

-> ’1997-12-02’

mysql>SELECT SUBDATE(’1998-01-02’, INTERVAL 31 DAY);

-> ’1997-12-02’

第二個(gè)形式允許對(duì)days使用整數(shù)值。在這些情況下,它被算作由日期或日期時(shí)間表達(dá)式expr中提取的天數(shù)。

mysql>SELECT SUBDATE(’1998-01-02 12:00:00’, 31);

-> ’1997-12-02 12:00:00’

注意不能使用格式'%X%V'來將一個(gè)year-week字符串轉(zhuǎn)化為一個(gè)日期,原因是當(dāng)一個(gè)星期跨越一個(gè)月份界限時(shí),一個(gè)年和星期的組合不能標(biāo)示一個(gè)唯一的年和月份。若要將year-week轉(zhuǎn)化為一個(gè)日期,則也應(yīng)指定具體工作日:

mysql>select str_to_date(’200442 Monday’, ’%X%V %W’);

-> 2004-10-18

SUBTIME(expr,expr2)

SUBTIME()從expr中提取expr2,然后返回結(jié)果。expr是一個(gè)時(shí)間或日期時(shí)間表達(dá)式,而xpr2是一個(gè)時(shí)間表達(dá)式。

mysql>SELECT SUBTIME(’1997-12-31 23:59:59.999999’,’1 1:1:1.000002’);

-> ’1997-12-30 22:58:58.999997’

mysql>SELECT SUBTIME(’01:00:00.999999’, ’02:00:00.999998’);

-> ’-00:59:59.999999’

SYSDATE()

返回當(dāng)前日期和時(shí)間值,格式為’YYYY-MM-DD HH:MM:SS’或YYYYMMDDHHMMSS, 具體格式根據(jù)函數(shù)是否用在字符串或數(shù)字語境而定。

在一個(gè)存儲(chǔ)程序或觸發(fā)器中, SYSDATE()返回其執(zhí)行的時(shí)間,而非存儲(chǔ)成都或觸發(fā)語句開始執(zhí)行的時(shí)間。這個(gè)NOW()的運(yùn)作有所不同。

TIME(expr)

提取一個(gè)時(shí)間或日期時(shí)間表達(dá)式的時(shí)間部分,并將其以字符串形式返回。

mysql>SELECT TIME(’2003-12-31 01:02:03’);

-> ’01:02:03’

mysql>SELECT TIME(’2003-12-31 01:02:03.000123’);

-> ’01:02:03.000123’

TIMEDIFF(expr,expr2)

TIMEDIFF()返回起始時(shí)間expr和結(jié)束時(shí)間expr2之間的時(shí)間。expr和expr2為時(shí)間或date-and-time表達(dá)式,兩個(gè)的類型必須一樣。

mysql>SELECT TIMEDIFF(’2000:01:01 00:00:00’,

->’2000:01:01 00:00:00.000001’);

-> ’-00:00:00.000001’

mysql>SELECT TIMEDIFF(’1997-12-31 23:59:59.000001’,

->’1997-12-30 01:01:01.000002’);

-> ’46:58:57.999999’

TIMESTAMP(expr) , TIMESTAMP(expr,expr2)

對(duì)于一個(gè)單參數(shù),該函數(shù)將日期或日期時(shí)間表達(dá)式expr作為日期時(shí)間值返回.對(duì)于兩個(gè)參數(shù),它將時(shí)間表達(dá)式expr2添加到日期或日期時(shí)間表達(dá)式expr中,將theresult作為日期時(shí)間值返回。

mysql>SELECT TIMESTAMP(’2003-12-31’);

-> ’2003-12-31 00:00:00’

mysql>SELECT TIMESTAMP(’2003-12-31 12:00:00’,’12:00:00’);

-> ’2004-01-01 00:00:00’

TIMESTAMPADD(interval,int_expr,datetime_expr)

將整型表達(dá)式int_expr添加到日期或日期時(shí)間表達(dá)式datetime_expr中。int_expr的單位被時(shí)間間隔參數(shù)給定,該參數(shù)必須是以下值的其中一個(gè):FRAC_SECOND、SECOND、MINUTE、HOUR、DAY、WEEK、MONTH、QUARTER或YEAR。

可使用所顯示的關(guān)鍵詞指定Interval值,或使用SQL_TSI_前綴。例如, DAY或SQL_TSI_DAY都是正確的。

mysql>SELECT TIMESTAMPADD(MINUTE,1,’2003-01-02’);

-> ’2003-01-02 00:01:00’

mysql>SELECT TIMESTAMPADD(WEEK,1,’2003-01-02’);

-> ’2003-01-09’

TIMESTAMPDIFF(interval,datetime_expr1,datetime_expr2)

返回日期或日期時(shí)間表達(dá)式datetime_expr1和datetime_expr2the之間的整數(shù)差。其結(jié)果的單位由interval參數(shù)給出。interval的法定值同TIMESTAMPADD()函數(shù)說明中所列出的相同。

mysql>SELECT TIMESTAMPDIFF(MONTH,’2003-02-01’,’2003-05-01’);

-> 3

mysql>SELECT TIMESTAMPDIFF(YEAR,’2002-05-01’,’2001-01-01’);

-> -1

TIME_FORMAT(time,format)

其使用和DATE_FORMAT()函數(shù)相同,然而format字符串可能僅會(huì)包含處理小時(shí)、分鐘和秒的格式說明符。其它說明符產(chǎn)生一個(gè)NULL值或0。

若timevalue包含一個(gè)大于23的小時(shí)部分,則%H和%k小時(shí)格式說明符會(huì)產(chǎn)生一個(gè)大于0..23的通常范圍的值。另一個(gè)小時(shí)格式說明符產(chǎn)生小時(shí)值模數(shù)12。

mysql>SELECT TIME_FORMAT(’100:00:00’, ’%H %k %h %I %l’);

-> ’100 100 04 04 4’

TIME_TO_SEC(time)

返回已轉(zhuǎn)化為秒的time參數(shù)。

mysql>SELECT TIME_TO_SEC(’22:23:00’);

-> 80580

mysql>SELECT TIME_TO_SEC(’00:39:38’);

-> 2378

TO_DAYS(date)

給定一個(gè)日期date,返回一個(gè)天數(shù)(從年份0開始的天數(shù))。

mysql>SELECT TO_DAYS(950501);

-> 728779

mysql>SELECT TO_DAYS(’1997-10-07’);

-> 729669

TO_DAYS()不用于陽歷出現(xiàn)(1582)前的值,原因是當(dāng)日歷改變時(shí),遺失的日期不會(huì)被考慮在內(nèi)。

請(qǐng)記住,MySQL使用“日期和時(shí)間類型”中的規(guī)則將日期中的二位數(shù)年份值轉(zhuǎn)化為四位。例如, ’1997-10-07’和’97-10-07’被視為同樣的日期:

mysql>SELECT TO_DAYS(’1997-10-07’), TO_DAYS(’97-10-07’);

-> 729669, 729669

對(duì)于1582年之前的日期(或許在其它地區(qū)為下一年),該函數(shù)的結(jié)果實(shí)不可靠的。

UNIX_TIMESTAMP(), UNIX_TIMESTAMP(date)

若無參數(shù)調(diào)用,則返回一個(gè)Unix timestamp (’1970-01-01 00:00:00’ GMT之后的秒數(shù))作為無符號(hào)整數(shù)。若用date來調(diào)用UNIX_TIMESTAMP(),它會(huì)將參數(shù)值以’1970-01-01 00:00:00’ GMT后的秒數(shù)的形式返回。date可以是一個(gè)DATE字符串、一個(gè)DATETIME字符串、一個(gè)TIMESTAMP或一個(gè)當(dāng)?shù)貢r(shí)間的YYMMDD或YYYMMDD格式的數(shù)字。

mysql>SELECT UNIX_TIMESTAMP();

-> 882226357

mysql>SELECT UNIX_TIMESTAMP(’1997-10-04 22:23:00’);

-> 875996580

當(dāng)UNIX_TIMESTAMP被用在TIMESTAMP列時(shí),函數(shù)直接返回內(nèi)部時(shí)戳值,而不進(jìn)行任何隱含的 “string-to-Unix-timestamp”轉(zhuǎn)化。假如你向UNIX_TIMESTAMP()傳遞一個(gè)溢出日期,它會(huì)返回0,但請(qǐng)注意只有基本范圍檢查會(huì)被履行(年份從1970到2037, 月份從01到12,日期從 01到31)。

假如你想要減去UNIX_TIMESTAMP()列,你或許希望刪去帶符號(hào)整數(shù)的結(jié)果。

UTC_DATE, UTC_DATE()

返回當(dāng)前UTC日期值,其格式為’YYYY-MM-DD’或YYYYMMDD,具體格式取決于函數(shù)是否用在字符串或數(shù)字語境中。

mysql>SELECT UTC_DATE(), UTC_DATE() + 0;

-> ’2003-08-14’, 20030814

UTC_TIME, UTC_TIME()

返回當(dāng)前UTC值,其格式為 ’HH:MM:SS’或HHMMSS,具體格式根據(jù)該函數(shù)是否用在字符串或數(shù)字語境而定。

mysql>SELECT UTC_TIME(), UTC_TIME() + 0;

-> ’18:07:53’, 180753

UTC_TIMESTAMP, UTC_TIMESTAMP()

返回當(dāng)前UTC日期及時(shí)間值,格式為’YYYY-MM-DD HH:MM:SS’或YYYYMMDDHHMMSS,具體格式根據(jù)該函數(shù)是否用在字符串或數(shù)字語境而定。

mysql>SELECT UTC_TIMESTAMP(), UTC_TIMESTAMP() + 0;

-> ’2003-08-14 18:08:04’, 20030814180804

WEEK(date[,mode])

該函數(shù)返回date對(duì)應(yīng)的星期數(shù)。WEEK()的雙參數(shù)形式允許你指定該星期是否起始于周日或周一, 以及返回值的范圍是否為從0到53或從1到53。若mode參數(shù)被省略,則使用default_week_format系統(tǒng)自變量的值。

以下表說明了mode參數(shù)的工作過程:d

第一天Mode工作日范圍Week 1為第一周...0周日0-53本年度中有一個(gè)周日1周一0-53本年度中有3天以上2周日1-53本年度中有一個(gè)周日3周一1-53本年度中有3天以上4周日0-53本年度中有3天以上5周一0-53本年度中有一個(gè)周一6周日1-53本年度中有3天以上7周一1-53本年度中有一個(gè)周一

mysql>SELECT WEEK(’1998-02-20’);

-> 7

mysql>SELECT WEEK(’1998-02-20’,0);

-> 7

mysql>SELECT WEEK(’1998-02-20’,1);

-> 8

mysql>SELECT WEEK(’1998-12-31’,1);

-> 53

注意,假如有一個(gè)日期位于前一年的最后一周, 若你不使用2、3、6或7作為mode參數(shù)選擇,則MySQL返回0:

mysql>SELECT YEAR(’2000-01-01’), WEEK(’2000-01-01’,0);

-> 2000, 0

有人或許會(huì)提出意見,認(rèn)為MySQL對(duì)于WEEK()函數(shù)應(yīng)該返回52,原因是給定的日期實(shí)際上發(fā)生在1999年的第52周。我們決定返回0作為代替的原因是我們希望該函數(shù)能返回“給定年份的星期數(shù)”。這使得WEEK()函數(shù)在同其它從日期中抽取日期部分的函數(shù)結(jié)合時(shí)的使用更加可靠。

假如你更希望所計(jì)算的關(guān)于年份的結(jié)果包括給定日期所在周的第一天,則應(yīng)使用0、2、5或7作為mode參數(shù)選擇。

mysql>SELECT WEEK(’2000-01-01’,2);

-> 52

作為選擇,可使用YEARWEEK()函數(shù):

mysql>SELECT YEARWEEK(’2000-01-01’);

-> 199952

mysql>SELECT MID(YEARWEEK(’2000-01-01’),5,2);

-> ’52’

WEEKDAY(date)

返回date(0 =周一, 1 =周二, ... 6 =周日)對(duì)應(yīng)的工作日索引 weekday index for

mysql>SELECT WEEKDAY(’1998-02-03 22:23:00’);

-> 1

mysql>SELECT WEEKDAY(’1997-11-05’);

-> 2

WEEKOFYEAR(date)

將該日期的陽歷周以數(shù)字形式返回,范圍是從1到53。它是一個(gè)兼容度函數(shù),相當(dāng)于WEEK(date,3)。

mysql>SELECT WEEKOFYEAR(’1998-02-20’);

-> 8

YEAR(date)

返回date對(duì)應(yīng)的年份,范圍是從1000到9999。

mysql>SELECT YEAR(’98-02-03’);

-> 1998

YEARWEEK(date), YEARWEEK(date,start)

返回一個(gè)日期對(duì)應(yīng)的年或周。start參數(shù)的工作同start參數(shù)對(duì)WEEK()的工作相同。結(jié)果中的年份可以和該年的第一周和最后一周對(duì)應(yīng)的日期參數(shù)有所不同。

mysql>SELECT YEARWEEK(’1987-01-01’);

-> 198653

注意,周數(shù)和WEEK()函數(shù)隊(duì)可選參數(shù)0或1可能會(huì)返回的(0) w有所不同,原因是此時(shí)WEEK()返回給定年份的語境中的周。

-> ’1997-10-07’

標(biāo)簽: MySQL 數(shù)據(jù)庫
相關(guān)文章:
主站蜘蛛池模板: 国产成本人三级在线观看网站 | 国产成人亚洲精品蜜芽影院 | 成人黄色在线播放 | 国产露脸对白91精品 | wwww国产| 欧美国产日韩在线播放 | 在线观看视频色 | 97一区二区三区四区久久 | 国内精品久久久久激情影院 | 免费直接看黄 | a4yy欧美一区二区三区 | 国产成人精品日本亚洲网址 | 欧美三级欧美一级 | 天堂久久久久va久久久久 | 亚洲狠狠搞 | 国产小视频福利 | 国产成人深夜福利在线观看 | 国产精品亚洲欧美 | 国产乱理论片在线观看理论 | 久久精品视频在线播放 | 欧洲一级毛片免费 | 国产激情视频在线观看首页 | 欧美特黄高清免费观看的 | 911国产在线观看精品 | 亚洲无线| 免费国产一区二区三区 | 林美仑在线三级播放 | 精品无码三级在线观看视频 | 日本中文字幕一区 | 自拍黄色片| 成人免费视频观看无遮挡 | 一级特黄特黄xxx视频 | 男女午夜爱爱久久无遮挡 | 亚洲午夜在线观看 | 欧美一级毛片免费观看视频 | 亚洲一区欧美一区 | 高清免费a级在线观看国产 高清免费毛片 | 国产成人久久精品 | 深夜影院一级毛片 | 国产精品成aⅴ人片在线观看 | 龙口护士门91午夜国产在线 |