MySQL内置函数中的日期和时间函数详解.docx

上传人:b****3 文档编号:1437439 上传时间:2022-10-22 格式:DOCX 页数:20 大小:180.17KB
下载 相关 举报
MySQL内置函数中的日期和时间函数详解.docx_第1页
第1页 / 共20页
MySQL内置函数中的日期和时间函数详解.docx_第2页
第2页 / 共20页
MySQL内置函数中的日期和时间函数详解.docx_第3页
第3页 / 共20页
MySQL内置函数中的日期和时间函数详解.docx_第4页
第4页 / 共20页
MySQL内置函数中的日期和时间函数详解.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

MySQL内置函数中的日期和时间函数详解.docx

《MySQL内置函数中的日期和时间函数详解.docx》由会员分享,可在线阅读,更多相关《MySQL内置函数中的日期和时间函数详解.docx(20页珍藏版)》请在冰豆网上搜索。

MySQL内置函数中的日期和时间函数详解.docx

MySQL内置函数中的日期和时间函数详解

MySQL内置函数中的日期和时间函数详解

下面的例子使用了时间函数。

以下询问选择了最近的30天内所有带有date_col值的记录:

mysql>SELECTsomethingFROMtbl_name

->WHEREDATE_SUB(CURDATE(),INTERVAL30DAY)<=date_col;

注意,这个询问也能选择将来的日期记录。

用于日期值的函数通常会接受时间日期值而忽略时间部分。

而用于时间值的函数通常接受时间日期值而忽略日期部分。

返回各自当前日期或时间的函数在每次询问执行开始时计算一次。

这意味着在一个单一询问中,对诸如NOW()的函数多次访问总是会得到同样的结果(未达到我们的目的,单一询问也包括对存储程序或触发器和被该程序/触发器调用的所有子程序的调用)。

这项原则也适用于CURDATE()、CURTIME()、UTC_DATE()、UTC_TIME()、UTC_TIMESTAMP(),以及所有和它们意义相同的函数。

CURRENT_TIMESTAMP()、CURRENT_TIME()、CURRENT_DATE()以及FROM_UNIXTIME()函数返回连接当前时区内的值,这个值可用作time_zone系统变量的值。

此外,UNIX_TIMESTAMP()假设其参数为一个当前时区的时间日期值。

以下函数的论述中返回值的范围会请求完全日期。

若一个日期为“零”值,或者是一个诸如'2001-11-00'之类的不完全日期,提取部分日期值的函数可能会返回0。

例如,DAYOFMONTH('2001-11-00')会返回0。

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

当被第二个参数的INTERVAL格式激活后,ADDDATE()就是DATE_ADD()的同义词。

相关函数SUBDATE()则是DATE_SUB()的同义词。

对于INTERVAL参数上的信息,请参见关于DATE_ADD()的论述。

mysql>SELECTDATE_ADD('1998-01-02',INTERVAL31DAY);

->'1998-02-02'

mysql>SELECTADDDATE('1998-01-02',INTERVAL31DAY);

->'1998-02-02'

若days参数只是整数值,则MySQL5.1将其作为天数值添加至expr。

mysql>SELECTADDDATE('1998-01-02',31);

->'1998-02-02'

◆ADDTIME(expr,expr2)

ADDTIME()将expr2添加至expr然后返回结果。

expr是一个时间或时间日期表达式,而expr2是一个时间表达式。

mysql>SELECTADDTIME('1997-12-3123:

59:

59.999999',

->               '11:

1:

1.000002');

->'1998-01-0201:

01:

01.000001'

mysql>SELECTADDTIME('01:

00:

00.999999','02:

00:

00.999998');

->'03:

00:

01.999997'

◆CONVERT_TZ(dt,from_tz,to_tz)

CONVERT_TZ()将时间日期值dt从from_tz给出的时区转到to_tz给出的时区,然后返回结果值。

在从若from_tz到UTC的转化过程中,该值超出TIMESTAMP类型的被支持范围,那么转化不会发生。

mysql>SELECTCONVERT_TZ('2004-01-0112:

00:

00','GMT','MET');

->'2004-01-0113:

00:

00'

mysql>SELECTCONVERT_TZ('2004-01-0112:

00:

00','+00:

00','+10:

00');

->'2004-01-0122:

00:

00'

注释:

若要使用诸如'MET'或'Europe/Moscow'之类的指定时间区,首先要设置正确的时区表。

◆CURDATE()

将当前日期按照'YYYY-MM-DD'或YYYYMMDD格式的值返回,具体格式根据函数用在字符串或是数字语境中而定。

mysql>SELECTCURDATE();

->'1997-12-15'

mysql>SELECTCURDATE()+0;

->19971215

◆CURRENT_DATECURRENT_DATE()

CURRENT_DATE和CURRENT_DATE()是的同义词.

◆CURTIME()

将当前时间以'HH:

MM:

SS'或HHMMSS的格式返回,具体格式根据函数用在字符串或是数字语境中而定。

mysql>SELECTCURTIME();

->'23:

50:

26'

mysql>SELECTCURTIME()+0;

->235026

◆CURRENT_TIME,CURRENT_TIME()

CURRENT_TIME和CURRENT_TIME()是CURTIME()的同义词。

◆CURRENT_TIMESTAMP,CURRENT_TIMESTAMP()

CURRENT_TIMESTAMP和CURRENT_TIMESTAMP()是NOW()的同义词。

◆DATE(expr)

提取日期或时间日期表达式expr中的日期部分。

mysql>SELECTDATE('2003-12-3101:

02:

03');

->'2003-12-31'

◆DATEDIFF(expr,expr2)

DATEDIFF()返回起始时间expr和结束时间expr2之间的天数。

Expr和expr2为日期或date-and-time表达式。

计算中只用到这些值的日期部分。

mysql>SELECTDATEDIFF('1997-12-3123:

59:

59','1997-12-30');

->1

mysql>SELECTDATEDIFF('1997-11-3023:

59:

59','1997-12-31');

->-31

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

这些函数执行日期运算。

date是一个DATETIME或DATE值,用来指定起始时间。

expr是一个表达式,用来指定从起始日期添加或减去的时间间隔值。

 Expr是一个字符串;对于负值的时间间隔,它可以以一个‘-’开头。

type为关键词,它指示了表达式被解释的方式。

关键词INTERVA及type分类符均不区分大小写。

以下表显示了type和expr参数的关系:

MySQL允许任何expr格式中的标点分隔符。

表中所显示的是建议的分隔符。

若date参数是一个DATE值,而你的计算只会包括YEAR、MONTH和DAY部分(即,没有时间部分),其结果是一个DATE值。

否则,结果将是一个DATETIME值。

若位于另一端的表达式是一个日期或日期时间值,则INTERVALexprtype只允许在+操作符的两端。

对于–操作符, INTERVALexprtype只允许在其右端,原因是从一个时间间隔中提取一个日期或日期时间值是毫无意义的。

(见下面的例子)。

mysql>SELECT'1997-12-3123:

59:

59'+INTERVAL1SECOND;

->'1998-01-0100:

00:

00'

mysql>SELECTINTERVAL1DAY+'1997-12-31';

->'1998-01-01'

mysql>SELECT'1998-01-01'-INTERVAL1SECOND;

->'1997-12-3123:

59:

59'

mysql>SELECTDATE_ADD('1997-12-3123:

59:

59',

->                INTERVAL1SECOND);

->'1998-01-0100:

00:

00'

mysql>SELECTDATE_ADD('1997-12-3123:

59:

59',

->                INTERVAL1DAY);

->'1998-01-0123:

59:

59'

mysql>SELECTDATE_ADD('1997-12-3123:

59:

59',

->                INTERVAL'1:

1'MINUTE_SECOND);

->'1998-01-0100:

01:

00'

mysql>SELECTDATE_SUB('1998-01-0100:

00:

00',

->                INTERVAL'11:

1:

1'DAY_SECOND);

->'1997-12-3022:

58:

59'

mysql>SELECTDATE_ADD('1998-01-0100:

00:

00',

->                INTERVAL'-110'DAY_HOUR);

->'1997-12-3014:

00:

00'

mysql>SELECTDATE_SUB('1998-01-02',INTERVAL31DAY);

->'1997-12-02'

mysql>SELECTDATE_ADD('1992-12-3123:

59:

59.000002',

->           INTERVAL'1.999999'SECOND_MICROSECOND);

->'1993-01-0100:

00:

01.000001'

若你指定了一个过于短的时间间隔值(不包括type关键词所预期的所有时间间隔部分),MySQL假定你已经省去了时间间隔值的最左部分。

例如,你指定了一种类型的DAY_SECOND,expr的值预期应当具有天、小时、分钟和秒部分。

若你指定了一个类似'1:

10'的值,MySQL假定天和小时部分不存在,那么这个值代表分和秒。

换言之,'1:

10'DAY_SECOND被解释为相当于'1:

10'MINUTE_SECOND。

这相当于MySQL将TIME值解释为所耗费的时间而不是日时的解释方式。

            

假如你对一个日期值添加或减去一些含有时间部分的内容,则结果自动转化为一个日期时间值:

mysql>SELECTDATE_ADD('1999-01-01',INTERVAL1DAY);

->'1999-01-02'

mysql>SELECTDATE_ADD('1999-01-01',INTERVAL1HOUR);

->'1999-01-0101:

00:

00'

假如你使用了格式严重错误的日期,则结果为NULL。

假如你添加了 MONTH、YEAR_MONTH或YEAR,而结果日期中有一天的日期大于添加的月份的日期最大限度,则这个日期自动被调整为添加月份的最大日期:

mysql>SELECTDATE_ADD('1998-01-30',INTERVAL1MONTH);

->'1998-02-28'

◆DATE

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 设计艺术

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1