请参见7.3.6日期和时间类型,了解每种类型所拥有的值的范围的描述以及指定日期和时间值的有效格式。
下面是一个使用日期函数的例子。以下查询选择date_col值在过去30天内的所有记录:
mysqlSELECTsomethingFROMtable
WHERETO_DAYS(NOW())-TO_DAYS(date_col)=30;
DAYOFWEEK(date)
返回日期的日索引(1=星期日,2=星期一,7=周六)。这些索引值对应于ODBC标准。
mysqlselectDAYOFWEEK('1998-02-03');
-3
WEEKDAY(date)
返回日期的日索引(0=星期一,1=星期二,6=周日)。
mysqlselectWEEKDAY('1997-10-0422:23:00');
-5
mysqlselectWEEKDAY('1997-11-05');
-2
DAYOFMONTH(date)
返回1到31之间的月份日期。
mysqlselectDAYOFMONTH('1998-02-03');
-3
DAYOFYEAR(date)
返回一年中日期的天数,范围从1到366。
mysqlselectDAYOFYEAR('1998-02-03');
-34
MONTH(date)
返回日期中的月份,范围从1到12。
mysqlselectMONTH('1998-02-03');
-2
DAYNAME(date)
返回日期是星期几。
mysqlselectDAYNAME('1998-02-05');
-'Thursday'
MONTHNAME(date)
返回日期的月份名称。
mysqlselectMONTHNAME('1998-02-05');
-'February'
QUARTER(date)
返回日期所在年份的第几个季度,范围为1到4。
mysqlselectQUARTER('98-04-01');
-2
WEEK(date)
WEEK(date,first)
对于星期日是一周的第一天的地方,有一个参数返回日期的周数,范围从0到52。WEEK()形式中允许有两个参数
您指定一周是从星期天开始还是从星期一开始?如果第二个参数是0,一周从星期日开始,如果第二个参数是1,
从星期一开始。
mysqlselectWEEK('1998-02-20');
-7
mysqlselectWEEK('1998-02-20',0);
-7
mysqlselectWEEK('1998-02-20',1);
-8
YEAR(date)
返回日期的年份,范围从1000到9999。
mysqlselectYEAR('98-02-03');
-1998
HOUR(time)
返回时间的小时值,范围从0到23。
mysqlselectHOUR('10:05:03');
-10
MINUTE(time)
返回时间的分钟数,范围从0到59。
mysqlselectMINUTE('98-02-0310:05:03');
-5
SECOND(time)
返回时间的秒数,范围从0到59。
mysqlselectSECOND('10:05:03');
-3
PERIOD_ADD(P,N)
阶段p加n个月(YYMM或YYYYMM格式)。以YYYYMM格式返回值。请注意,阶段参数p不是日期值。
mysqlselectPERIOD_ADD(9801,2);
-199803
PERIOD_DIFF(P1,P2)
返回P1期和P2期之间的月数。P1和P2应该采用YYMM或YYYYMM格式。请注意,期间参数P1和P2不是日期值。
mysqlselectPERIOD_DIFF(9802,199703);
-11
DATE_ADD(date,INTERVALexprtype)
DATE_SUB(date,INTERVALexprtype)
ADDDATE(date,INTERVALexprtype)
SUBDATE(date,INTERVALexprtype)
这些函数执行日期操作。对于MySQL3.22,它们是新的。ADDDATE()和SUBDATE()是DATE_ADD()和DATE_SUB()的同义词。
在MySQL3.23中,可以使用and-代替DATE_ADD()和DATE_SUB()。(参见示例)日期是指定的开始日期。
DATETIME或DATE值,expr是一个表达式,指定开始日期加上或减去的间隔值,expr是一个字符串。它可以基于
“-”开始表示负区间。Type是指示应该如何解释表达式的关键字。EXTRACT(typeFROMdate)函数从日期开始。
返回中的“类型”间隔。下表显示了type和expr参数之间的关系:type值表示预期的expr格式。
Second second second
MINUTE分钟MINUTES
HOUR时间HOURS
DAY天DAYS
MONTH月MONTHS
YEAR年YEARS
MINUTE_SECOND分钟和秒'MINUTES:SECONDS'
HOUR_MINUTE小时和分钟'HOURS:MINUTES'
DAY_HOUR天和小时'DAYSHOURS'
YEAR_MONTH年和月'YEARS-MONTHS'
HOUR_SECOND小时,分钟,'HOURS:MINUTES:SECONDS'
DAY_MINUTE天,小时,分钟'DAYSHOURS:MINUTES'
DAY_SECOND天,小时,分钟,秒'DAYSHOURS:MINUTES:SECONDS'
MySQL在expr格式中允许任何标点分隔符。表示显示的是建议的分隔符。如果date参数是一个DATE值并且你的计算仅仅
包含YEAR、MONTH和DAY部分(即,没有时间部分),结果是一个DATE值。否则结果是一个DATETIME值。
mysqlSELECT'1997-12-3123:59:59'+INTERVAL1SECOND;
-1998-01-0100:00:00
mysqlSELECTINTERVAL1DAY+'1997-12-31';
-1998-01-01
mysqlSELECT'1998-01-01'-INTERVAL1SECOND;
-1997-12-3123:59:59
mysqlSELECTDATE_ADD('1997-12-3123:59:59',
INTERVAL1SECOND);
-1998-01-0100:00:00
mysqlSELECTDATE_ADD('1997-12-3123:59:59',
INTERVAL1DAY);
-1998-01-0123:59:59
mysqlSELECTDATE_ADD('1997-12-3123:59:59',
INTERVAL'1:1'MINUTE_SECOND);
-1998-01-0100:01:00
mysqlSELECTDATE_SUB('1998-01-0100:00:00',
INTERVAL'11:1:1'DAY_SECOND);
-1997-12-3022:58:59
mysqlSELECTDATE_ADD('1998-01-0100:00:00',
INTERVAL'-110'DAY_HOUR);
-1997-12-3014:00:00
mysqlSELECTDATE_SUB('1998-01-02',INTERVAL31DAY);
-1997-12-02
mysqlSELECTEXTRACT(YEARFROM'1999-07-02');
-1999
mysqlSELECTEXTRACT(YEAR_MONTHFROM'1999-07-0201:02:03');
-199907
mysqlSELECTEXTRACT(DAY_MINUTEFROM'1999-07-0201:02:03');
-20102
如果你指定太短的间隔值(不包括type关键词期望的间隔部分),MySQL假设你省掉了间隔值的最左面部分。例如,
如果你指定一个type是DAY_SECOND,值expr被希望有天、小时、分钟和秒部分。如果你象'1:10'这样指定值,
MySQL假设日子和小时部分是丢失的并且值代表分钟和秒。换句话