描述:有一个会员表,有个birthday字段,值为YYYYMMDD格式,现在要查询一个时间段内过生日的会员,比如0603到0708这个时间段内所有过生日的会员。 SQL语句:SelectFromuserWhereDATEFORMAT(birthday,md)0603andDATEFORMAT(birthday,md)0708; 根据format字符串格式化date值。下列修饰符可以被用在format字符串中:M月名字(JanuaryDecember) W星期名字(SundaySaturday) D有英语前缀的月份的日期(1st,2nd,3rd,等等。) Y年,数字,4位 y年,数字,2位 a缩写的星期名字(SunSat) d月份中的天数,数字(0031) e月份中的天数,数字(031) m月,数字(0112) c月,数字(112) b缩写的月份名字(JanDec) j一年中的天数(001366) H小时(0023) k小时(023) h小时(0112) I小时(0112) l小时(112) i分钟,数字(0059) r时间,12小时(hh:mm:ss〔AP〕M) T时间,24小时(hh:mm:ss) S秒(0059) s秒(0059) pAM或PM w一个星期中的天数(0Sunday6Saturday) U星期(052),这里星期天是星期的第一天 u星期(052),这里星期一是星期的第一天 一个文字。 所有的其他字符不做解释被复制到结果中。 mysqlselectDATEFORMAT(1997100422:23:00,WMY); SaturdayOctober1997 mysqlselectDATEFORMAT(1997100422:23:00,H:i:s); 22:23:00 mysqlselectDATEFORMAT(1997100422:23:00, Dyadmbj); 4th97Sat0410Oct277 mysqlselectDATEFORMAT(1997100422:23:00, HkIrTSw); 22221010:23:00PM22:23:00006 MySQL3。23中,在格式修饰符字符前需要。在MySQL更早的版本中,是可选的。 说明:常用的时间日期处理函数,上面的主要是DATEFORMAT()这个函数的应用。 1、DAYOFWEEK(date) 返回日期date的星期索引(1星期天,2星期一,7星期六)。这些索引值对应于ODBC标准。 mysqlselectDAYOFWEEK(19980203); 3 2、WEEKDAY(date) 返回date的星期索引(0星期一,1星期二,6星期天)。 mysqlselectWEEKDAY(1997100422:23:00); 5 3、DAYOFMONTH(date) 返回date的月份中日期,在1到31范围内。 mysqlselectDAYOFMONTH(19980203); 3 4、DAYOFYEAR(date) 返回date在一年中的日数,在1到366范围内。 mysqlselectDAYOFYEAR(19980203); 34 5、MONTH(date) 返回date的月份,范围1到12。 mysqlselectMONTH(19980203); 2 6、DAYNAME(date) 返回date的星期名字。 mysqlselectDAYNAME(19980205); Thursday 7、MONTHNAME(date) 返回date的月份名字。 mysqlselectMONTHNAME(19980205); February 8、QUARTER(date) 返回date一年中的季度,范围1到4。 mysqlselectQUARTER(980401); 2 9、WEEK(date) WEEK(date,first)对于星期天是一周的第一天的地方,有一个单个参数,返回date的周数,范围在0到52。2个参形式WEEK()允许。你指定星期是否开始于星期天或星期一。如果第二个参数是0,星期从星期天开始,如果第二个参数是1, 从星期一开始。 mysqlselectWEEK(19980220); 7 mysqlselectWEEK(19980220,0); 7 mysqlselectWEEK(19980220,1); 8 10、YEAR(date) 返回date的年份,范围在1000到9999。 mysqlselectYEAR(980203); 1998 11、HOUR(time) 返回time的小时,范围是0到23。 mysqlselectHOUR(10:05:03); 10 12、MINUTE(time) 返回time的分钟,范围是0到59。 mysqlselectMINUTE(98020310:05:03); 5 13、SECOND(time) 回来time的秒数,范围是0到59。 mysqlselectSECOND(10:05:03); 3 14、PERIODADD(P,N) 增加N个月到阶段P(以格式YYMM或YYYYMM)。以格式YYYYMM返回值。注意阶段参数P不是日期值。 mysqlselectPERIODADD(9801,2); 199803 15、PERIODDIFF(P1,P2) 返回在时期P1和P2之间月数,P1和P2应该以格式YYMM或YYYYMM。注意,时期参数P1和P2不是日期值。 mysqlselectPERIODDIFF(9802,199703); 11 16、 DATEADD(date,INTERVALexprtype) DATESUB(date,INTERVALexprtype) ADDDATE(date,INTERVALexprtype) SUBDATE(date,INTERVALexprtype) 这些功能执行日期运算。对于MySQL3。22,他们是新的。ADDDATE()和SUBDATE()是DATEADD()和DATESUB()的同义词。 在MySQL3。23中,你可以使用和而不是DATEADD()和DATESUB()。(见例子)date是一个指定开始日期的 DATETIME或DATE值,expr是指定加到开始日期或从开始日期减去的间隔值一个表达式,expr是一个字符串;它可以以一个开始表示负间隔。type是一个关键词,指明表达式应该如何被解释。EXTRACT(typeFROMdate)函数从日期中返回type间隔。 下表显示了type和expr参数怎样被关联:type值含义期望的expr格式 SECOND秒SECONDS MINUTE分钟MINUTES HOUR时间HOURS DAY天DAYS MONTH月MONTHS YEAR年YEARS MINUTESECOND分钟和秒MINUTES:SECONDS HOURMINUTE小时和分钟HOURS:MINUTES DAYHOUR天和小时DAYSHOURS YEARMONTH年和月YEARSMONTHS HOURSECOND小时,分钟,HOURS:MINUTES:SECONDS DAYMINUTE天,小时,分钟DAYSHOURS:MINUTES DAYSECOND天,小时,分钟,秒DAYSHOURS:MINUTES:SECONDS MySQL在expr格式中允许任何标点分隔符。表示显示的是建议的分隔符。如果date参数是一个DATE值并且你的计算仅仅包含YEAR、MONTH和DAY部分(即,没有时间部分),结果是一个DATE值。否则结果是一个DATETIME值。 mysqlSELECT1997123123:59:59INTERVAL1SECOND; 1998010100:00:00 mysqlSELECTINTERVAL1DAY19971231; 19980101 mysqlSELECT19980101INTERVAL1SECOND; 1997123123:59:59 mysqlSELECTDATEADD(1997123123:59:59, INTERVAL1SECOND); 1998010100:00:00 mysqlSELECTDATEADD(1997123123:59:59,INTERVAL1DAY); 1998010123:59:59 mysqlSELECTDATEADD(1997123123:59:59, INTERVAL1:1MINUTESECOND); 1998010100:01:00 mysqlSELECTDATESUB(1998010100:00:00, INTERVAL11:1:1DAYSECOND); 1997123022:58:59 mysqlSELECTDATEADD(1998010100:00:00, INTERVAL110DAYHOUR); 1997123014:00:00 mysqlSELECTDATESUB(19980102,INTERVAL31DAY); 19971202 mysqlSELECTEXTRACT(YEARFROM19990702); 1999 mysqlSELECTEXTRACT(YEARMONTHFROM1999070201:02:03); 199907 mysqlSELECTEXTRACT(DAYMINUTEFROM1999070201:02:03); 20102 如果你指定太短的间隔值(不包括type关键词期望的间隔部分),MySQL假设你省掉了间隔值的最左面部分。例如,如果你指定一个type是DAYSECOND,值expr被希望有天、小时、分钟和秒部分。如果你象1:10这样指定值, MySQL假设日子和小时部分是丢失的并且值代表分钟和秒。换句话说,1:10DAYSECOND以它等价于1:10MINUTESECOND的方式解释,这对那MySQL解释TIME值表示经过的时间而非作为一天的时间的方式有二义性。如果你使用确实不正确的日期,结果是NULL。如果你增加MONTH、YEARMONTH或YEAR并且结果日期大于新月份的最大值天数,日子在新月用最大的天调整。 mysqlselectDATEADD(19980130,Interval1month); 19980228 注意,从前面的例子中词INTERVAL和type关键词不是区分大小写的。 TODAYS(date) 给出一个日期date,返回一个天数(从0年的天数)。 mysqlselectTODAYS(950501); 728779 mysqlselectTODAYS(19971007); 729669 17、TODAYS()不打算用于使用格列高里历(1582)出现前的值。 18、FROMDAYS(N) 给出一个天数N,返回一个DATE值。 mysqlselectFROMDAYS(729669); 19971007 TODAYS()不打算用于使用格列高里历(1582)出现前的值。 19、DATEFORMAT(date,format) 根据format字符串格式化date值。下列修饰符可以被用在format字符串中:M月名字(JanuaryDecember) W星期名字(SundaySaturday) D有英语前缀的月份的日期(1st,2nd,3rd,等等。) Y年,数字,4位 y年,数字,2位 a缩写的星期名字(SunSat) d月份中的天数,数字(0031) e月份中的天数,数字(031) m月,数字(0112) c月,数字(112) b缩写的月份名字(JanDec) j一年中的天数(001366) H小时(0023) k小时(023) h小时(0112) I小时(0112) l小时(112) i分钟,数字(0059) r时间,12小时(hh:mm:ss〔AP〕M) T时间,24小时(hh:mm:ss) S秒(0059) s秒(0059) pAM或PM w一个星期中的天数(0Sunday6Saturday) U星期(052),这里星期天是星期的第一天 u星期(052),这里星期一是星期的第一天 一个文字。 所有的其他字符不做解释被复制到结果中。 mysqlselectDATEFORMAT(1997100422:23:00,WMY); SaturdayOctober1997 mysqlselectDATEFORMAT(1997100422:23:00,H:i:s); 22:23:00 mysqlselectDATEFORMAT(1997100422:23:00, Dyadmbj); 4th97Sat0410Oct277 mysqlselectDATEFORMAT(1997100422:23:00, HkIrTSw); 22221010:23:00PM22:23:00006 MySQL3。23中,在格式修饰符字符前需要。在MySQL更早的版本中,是可选的。 20、TIMEFORMAT(time,format) 这象上面的DATEFORMAT()函数一样使用,但是format字符串只能包含处理小时、分钟和秒的那些格式修饰符。其他修饰符产生一个NULL值或0。 21、CURDATE() CURRENTDATE 以YYYYMMDD或YYYYMMDD格式返回今天日期值,取决于函数是在一个字符串还是数字上下文被使用。 mysqlselectCURDATE(); 19971215 mysqlselectCURDATE()0; 19971215 22、CURTIME() CURRENTTIME 以HH:MM:SS或HHMMSS格式返回当前时间值,取决于函数是在一个字符串还是在数字的上下文被使用。 mysqlselectCURTIME(); 23:50:26 mysqlselectCURTIME()0; 235026 23、NOW() 24、SYSDATE() CURRENTTIMESTAMP 以YYYYMMDDHH:MM:SS或YYYYMMDDHHMMSS格式返回当前的日期和时间,取决于函数是在一个字符串还是在数字的上下文被使用。 mysqlselectNOW(); 1997121523:50:26 mysqlselectNOW()0; 19971215235026 25、UNIXTIMESTAMP() UNIXTIMESTAMP(date) 如果没有参数调用,返回一个Unix时间戳记(从1970010100:00:00GMT开始的秒数)。如果UNIXTIMESTAMP()用一个date参数被调用,它返回从1970010100:00:00GMT开始的秒数值。date可以是一个DATE字符串、一个DATETIME字符串、一个TIMESTAMP或以YYMMDD或YYYYMMDD格式的本地时间的一个数字。 mysqlselectUNIXTIMESTAMP(); 882226357 mysqlselectUNIXTIMESTAMP(1997100422:23:00); 875996580 当UNIXTIMESTAMP被用于一个TIMESTAMP列,函数将直接接受值,没有隐含的stringtounixtimestamp变换。 26、FROMUNIXTIME(unixtimestamp) 以YYYYMMDDHH:MM:SS或YYYYMMDDHHMMSS格式返回unixtimestamp参数所表示的值,取决于函数是在一个字符串还是或数字上下文中被使用。 mysqlselectFROMUNIXTIME(875996580); 1997100422:23:00 mysqlselectFROMUNIXTIME(875996580)0; 19971004222300 27、FROMUNIXTIME(unixtimestamp,format) 返回表示Unix时间标记的一个字符串,根据format字符串格式化。format可以包含与DATEFORMAT()函数列出的条目同样的修饰符。 mysqlselectFROMUNIXTIME(UNIXTIMESTAMP(),YDMh:i:sx); 199723rdDecember03:43:30x 28、SECTOTIME(seconds) 返回seconds参数,变换成小时、分钟和秒,值以HH:MM:SS或HHMMSS格式化,取决于函数是在一个字符串还是在数字上下文中被使用。 mysqlselectSECTOTIME(2378); 00:39:38 mysqlselectSECTOTIME(2378)0; 3938 29、TIMETOSEC(time) 返回time参数,转换成秒。 mysqlselectTIMETOSEC(22:23:00); 80580 mysqlselectTIMETOSEC(00:39:38); 2378