加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

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页》要点:
本文介绍了MYSQL教程mysql的日期和时间函数大全第1/2页,希望对您有用。如果有疑问,可以联系我们。

mysql>?SELECT?something?FROM?tbl_name
???????????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全面培养人才。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读