MYSQL教程mysql的日期和时间函数大全第1/2页
发布时间:2020-12-12 02:57:04 所属栏目:MySql教程 来源:网络整理
导读:《MYSQL教程mysql的日期和时间函数大全第1/2页》要点: 本文介绍了MYSQL教程mysql的日期和时间函数大全第1/2页,希望对您有用。如果有疑问,可以联系我们。 mysql?SELECT?something?FROM?tbl_name ???????????WHERE?TO_DAYS(NOW())?-?TO_DAYS(date_col)?=?30
《MYSQL教程mysql的日期和时间函数大全第1/2页》要点: ???????????WHERE?TO_DAYS(NOW())?-?TO_DAYS(date_col)?<=?30; DAYOFWEEK(date)? 返回?date?的星期索引(1?=?Sunday,?2?=?Monday,?...?7?=?Saturday).索引值符合?ODBC?的标准.? mysql>?SELECT?DAYOFWEEK('1998-02-03'); ????????->?3 WEEKDAY(date)? 返回?date?的星期索引(0?=?Monday,?1?=?Tuesday,?...?6?=?Sunday):? mysql>?SELECT?WEEKDAY('1998-02-03?22:23:00'); ????????->?1 mysql>?SELECT?WEEKDAY('1997-11-05'); ????????->?2 DAYOFMONTH(date)? 返回?date?是一月中的第几天,范围为?1?到?31:? mysql>?SELECT?DAYOFMONTH('1998-02-03'); ????????->?3 DAYOFYEAR(date)? 返回?date?是一年中的第几天,范围为?1?到?366:? 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)? 对于星期日是一周中的第一天的场合,如果函数只有一个参数调用,返回?date?为一年的第几周,返回值范围为?0?到?53?(是的,可能有第?53?周的开始).两个参数形式的?WEEK()?允许你指定一周是否以星期日或星期一开始,以及返回值为?0-53?还是?1-52.?这里的一个表显示第二个参数是如何工作的:?值??含义?? 0??一周以星期日开始,返回值范围为?0-53?? 1??一周以星期一开始,返回值范围为?0-53?? 2??一周以星期日开始,返回值范围为?1-53?? 3??一周以星期一开始,返回值范围为?1-53?(ISO?8601)?? 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 注意,在版本?4.0?中,WEEK(#,0)?被更改为匹配?USA?历法.?注意,如果一周是上一年的最后一周,当你没有使用?2?或?3?做为可选参数时,MySQL?将返回?0:? mysql>?SELECT?YEAR('2000-01-01'),?WEEK('2000-01-01',0); ????????->?2000,?0 mysql>?SELECT?WEEK('2000-01-01',2); ????????->?52 你可能会争辩说,当给定的日期值实际上是?1999?年的第?52?周的一部分时,MySQL?对?WEEK()?函数应该返回?52.我们决定返回?0?,是因为我们希望该函数返回“在指定年份中是第几周”.当与其它的提取日期值中的月日值的函数结合使用时,这使得?WEEK()?函数的用法可靠.?如果你更希望能得到恰当的年-周值,那么你应该使用参数?2?或?3?做为可选参数,或者使用函数?YEARWEEK()?:? mysql>?SELECT?YEARWEEK('2000-01-01'); ????????->?199952 mysql>?SELECT?MID(YEARWEEK('2000-01-01'),5,2); ????????->?52 YEAR(date)? 返回?date?的年份,范围为?1000?到?9999:? mysql>?SELECT?YEAR('98-02-03'); ????????->?1998 YEARWEEK(date)? YEARWEEK(date,first)? 返回一个日期值是的哪一年的哪一周.第二个参数的形式与作用完全与?WEEK()?的第二个参数一致.注意,对于给定的日期参数是一年的第一周或最后一周的,返回的年份值可能与日期参数给出的年份不一致:? mysql>?SELECT?YEARWEEK('1987-01-01'); ????????->?198653 注意,对于可选参数?0?或?1,周值的返回值不同于?WEEK()?函数所返回值(0),?WEEK()?根据给定的年语境返回周值.? 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?的秒值,范围为?0?到?59:? mysql>?SELECT?SECOND('10:05:03'); ????????->?3 PERIOD_ADD(P,N)? 增加?N?个月到时期?P(格式为?YYMM?或?YYYYMM)中.以?YYYYMM?格式返回值.?注意,期间参数?P?不是?一个日期值:? mysql>?SELECT?PERIOD_ADD(9801,2); ????????->?199803 PERIOD_DIFF(P1,P2)? 返回时期?P1?和?P2?之间的月数.P1?和?P2?应该以?YYMM?或?YYYYMM?指定.?注意,时期参数?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)? 这些函数执行日期的算术运算.ADDDATE()?和?SUBDATE()?分别是?DATE_ADD()?和?DATE_SUB()?的同义词.?在?MySQL?3.23?中,如果表达式的右边是一个日期值或一个日期时间型字段,你可以使用?+?和?-?代替?DATE_ADD()?和?DATE_SUB()(示例如下).?参数?date?是一个?DATETIME?或?DATE?值,指定一个日期的开始.expr?是一个表达式,指定从开始日期上增加还是减去间隔值.expr?是一个字符串;它可以以一个?“-”?领头表示一个负的间隔值.type?是一个关键词,它标志着表达式以何格式被解释.?下表显示?type?和?expr?参数是如何关联的:?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"?? 在?expr?的格式中,MySQL?允许任何字符作为定界符.表中所显示的是建议的定界字符.如果?date?参数是一个?DATE?值,并且计算的间隔仅仅有?YEAR、MONTH?和?DAY?部分(没有时间部分),那么返回值也是一个?DATE?值.否则返回值是一个?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 _baidu_page_break_tag_ 如果你指定了一个太短的间隔值(没有包括?type?关键词所期望的所有间隔部分),MySQL?假设你遗漏了间隔值的最左边部分.例如,如果指定一个?type?为?DAY_SECOND,那么?expr?值被期望包含天、小时、分钟和秒部分.如果你象?"1:10"?样指定一个值,MySQL?假设天和小时部分被遗漏了,指定的值代表分钟和秒.换句话说,"1:10"?DAY_SECOND?被解释为等价于?"1:10"?MINUTE_SECOND.这类似于?MySQL?解释?TIME?值为经过的时间而不是一天的时刻.?注意,如果依着包含一个时间部分的间隔增加或减少一个日期值,该日期值将被自动地转换到一个日期时间值:? 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 如果你使用了确定不正确的日期,返回结果将是?NULL.如果你增加?MONTH、YEAR_MONTH?或?YEAR,并且结果日期的天比新月份的最大天数还大,那么它将被调整到新月份的最大天数:? mysql>?SELECT?DATE_ADD('1998-01-30',?INTERVAL?1?MONTH); ????????->?1998-02-28 注意,上面的例子中,单词?INTERVAL?和关键词?type?是不区分字母大小写的.? EXTRACT(type?FROM?date)? EXTRACT()?函数使用与?DATE_ADD()?或?DATE_SUB()?一致的间隔类型,但是它用于指定从日期中提取的部分,而不是进行日期算术运算.? 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 TO_DAYS(date)? 给出一个日期?date,返回一个天数(从?0?年开始的天数):? mysql>?SELECT?TO_DAYS(950501); ????????->?728779 mysql>?SELECT?TO_DAYS('1997-10-07'); ????????->?729669 TO_DAYS()?无意于使用先于格里高里历法(即现行的阳历)(1582)出现的值,因为它不考虑当历法改变时所遗失的天数.? FROM_DAYS(N)? 给出一个天数?N,返回一个?DATE?值:? mysql>?SELECT?FROM_DAYS(729669); ????????->?'1997-10-07' FROM_DAYS()?无意于使用先于格里高里历法(1582)出现的值,因为它不考虑当历法改变时所遗失的天数.? DATE_FORMAT(date,format)? 按照?format?字符串格式化?date?值.下面的修饰符可被用于?format?字符串中:?修饰符??含义?? %M??月的名字?(January..December)?? %W??星期的名字?(Sunday..Saturday)?? %D??有英文后缀的某月的第几天?(0th,?1st,?2nd,?3rd,?etc.)?? %Y??年份,数字的,4?位?? %y??年份,2?位?? %X??周值的年份,星期日是一个星期的第一天,4?位,与?'%V'?一同使用?? %x??周值的年份,星期一是一个星期的第一天,与?'%v'?一同使用?? %a??缩写的星期名?(Sun..Sat)?? %d??月份中的天数,数字的?(00..31)?? %e??月份中的天数,数字的?(0..31)?? %m??月,数字的?(00..12)?? %c??月,数字的?(0..12)?? %b??缩写的月份名?(Jan..Dec)?? %j??一年中的天数?(001..366)?? %H??小时?(00..23)?? %k??小时?(0..23)?? %h??小时?(01..12)?? %I??小时?(01..12)?? %l??小时?(1..12)?? %i??分钟,数字的?(00..59)?? %r??时间,12?小时?(hh:mm:ss?[AP]M)?? %T??时间,24?小时?(hh:mm:ss)?? %S??秒?(00..59)?? %s??秒?(00..59)?? %p??AM?或?PM?? %w??一周中的天数?(0=Sunday..6=Saturday)?? %U??星期?(00..53),星期日是一个星期的第一天?? %u??星期?(00..53),星期一是一个星期的第一天?? %V??星期?(01..53),星期日是一个星期的第一天.与?'%X'?一起使用?? %v??星期?(01..53),星期一是一个星期的第一天.与?'%x'?一起使用?? %%??一个字母?“%”?? 所有其它的字符不经过解释,直接复制到结果中:? 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' 在?MySQL?3.23?中,在格式修饰符前需要字符?`%'.在更早的?MySQL?版本中,`%'?是可选的.?月份与天修饰符的范围从零开始的原因是,在?MySQL?3.23?中,它允许存储不完善的日期值(例如?'2004-00-00').? TIME_FORMAT(time,format)? 它的使用方法与上面的?DATE_FORMAT()?函数相似,但是?format?字符串只包含处理小时、分和秒的那些格式修饰符.使用其它的修饰符会产生一个?NULL?值或?0.? CURDATE()? CURRENT_DATE? 以?'YYYY-MM-DD'?或?YYYYMMDD?格式返回当前的日期值,返回的格式取决于该函数是用于字符串还是数字语境中:? mysql>?SELECT?CURDATE(); ????????->?'1997-12-15' mysql>?SELECT?CURDATE()?+?0; ????????->?19971215 CURTIME()? CURRENT_TIME? 以?'HH:MM:SS'?或?HHMMSS?格式返回当前的时间值,返回的格式取决于该函数是用于字符串还是数字语境中:? mysql>?SELECT?CURTIME(); ????????->?'23:50:26' mysql>?SELECT?CURTIME()?+?0; ????????->?235026 NOW()? SYSDATE()? CURRENT_TIMESTAMP? 以?'YYYY-MM-DD?HH:MM:SS'?或?YYYYMMDDHHMMSS?格式返回当前的日期时间值,返回的格式取决于该函数是用于字符串还是数字语境中:? mysql>?SELECT?NOW(); ????????->?'1997-12-15?23:50:26' mysql>?SELECT?NOW()?+?0; ????????->?19971215235026 注意,函数?NOW()?在每个查询中只计算一次,也就是在查询开始执行时.这就是说,如果在一个单独的查询中多次引用了?NOW(),它只会给出值都是一个相同的时间.? UNIX_TIMESTAMP()? UNIX_TIMESTAMP(date)? 如果调用时没有参数,以无符号的整数形式返回一个?Unix?时间戳(从?'1970-01-01?00:00:00'?GMT?开始的秒数).如果以一个参数?date?调用?UNIX_TIMESTAMP(),它将返回该参数值从?'1970-01-01?00:00:00'?GMT?开始经过的秒数值.date?可以是一个?DATE?字符串,一个?DATETIME?字符串,一个?TIMESTAMP,或者以一个?YYMMDD?或?YYYYMMDD?显示的本地时间:? mysql>?SELECT?UNIX_TIMESTAMP(); ????????->?882226357 mysql>?SELECT?UNIX_TIMESTAMP('1997-10-04?22:23:00'); ????????->?875996580 当?UNIX_TIMESTAMP?被用于一个?TIMESTAMP?列时,函数直接返回一个内部的时间戳值,而不进行一个隐含地?“string-to-unix-timestamp”?转换.如果你传递一个超出范围的日期参数给?UNIX_TIMESTAMP()?,它将返回?0,但是请注意,MySQL?对其仅仅进行基本的检验(年范围?1970-2037,月份?01-12,日期?01-31).?如果你希望减去?UNIX_TIMESTAMP()?列,你应该需要将结果强制转换为一有符号整数.查看章节?6.3.5?Cast?函数.? FROM_UNIXTIME(unix_timestamp?[,format])? 以?'YYYY-MM-DD?HH:MM:SS'?或?YYYYMMDDHHMMSS?格式返回一个?unix_timestamp?参数值,返回值的形式取决于该函数使用于字符串还是数字语境.?如果?format?给出,返回值依?format?字符串被格式.format?可以包含与?DATE_FORMAT()?函数同样的修饰符.? 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'); ????????->?'1997?23rd?December?03:43:30?1997' SEC_TO_TIME(seconds)? 以?'HH:MM:SS'?或?HHMMSS?格式返回参数?seconds?被转换到时分秒后的值,返回值的形式取决于该函数使用于字符串还是数字语境:? mysql>?SELECT?SEC_TO_TIME(2378); ????????->?'00:39:38' mysql>?SELECT?SEC_TO_TIME(2378)?+?0; ????????->?3938 TIME_TO_SEC(time)? 将参数?time?转换为秒数后返回:? mysql>?SELECT?TIME_TO_SEC('22:23:00'); ????????->?80580 mysql>?SELECT?TIME_TO_SEC('00:39:38'); ????????->?2378 编程之家PHP培训学院每天发布《MYSQL教程mysql的日期和时间函数大全第1/2页》等实战技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培养人才。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |