本章论述了一些可用于操作时间值的MySQL内置函数中的日期和时间函数,希望可以给你带来帮助。

下面的比如运用了时刻函数。以下问询挑选了最近的 30天内避实就虚带有date_col 值的记载:

mysql> SELECT something FROM tbl_name
    -> WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= 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,INTERVAL expr type) ADDDATE(expr,days)

当被第二个参数的INTERVAL格局激活后, ADDDATE()便是DATE_ADD()的近义词。相关函数SUBDATE() 则是DATE_SUB()的近义词。关于INTERVAL参数上的信息 ,请拜见关于DATE_ADD()的论说。

mysql> SELECT DATE_ADD('1998-01-02', INTERVAL 31 DAY);
-> '1998-02-02'
mysql> SELECT ADDDATE('1998-01-02', INTERVAL 31 DAY);
-> '1998-02-02'

若 days 参数仅仅整数值,则 MySQL 5.1将其作为天数值增加至 expr。

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

◆ ADDTIME(expr,expr2)

ADDTIME()将 expr2增加至expr 然后回来成果。 expr 是一个时刻或时刻日期表达式,而expr2 是一个时刻表达式。

mysql> SELECT ADDTIME('1997-12-31 23:59:59.999999',
-> '1 1:1:1.000002');
-> '1998-01-02 01:01:01.000001'
mysql> SELECT ADDTIME('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> SELECT CONVERT_TZ('2004-01-01 12:00:00','GMT','MET');
-> '2004-01-01 13:00:00'
mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','+00:00','+10:00');
-> '2004-01-01 22:00:00'

注释:若要运用比如 'MET'或 'Europe/Moscow'之类的指定时刻区,首先要设置正确的时区表。

◆ CURDATE()

将当时日期依照'YYYY-MM-DD' 或YYYYMMDD 格局的值回来,详细格局依据函数用在字符串或是数字语境中而定。

mysql> SELECT CURDATE();
-> '1997-12-15'
mysql> SELECT CURDATE() + 0;
-> 19971215

◆ CURRENT_DATE CURRENT_DATE()

CURRENT_DATE和CURRENT_DATE()是的近义词.

◆ CURTIME()

将当时时刻以'HH:MM:SS'或 HHMMSS 的格局回来, 详细格局依据函数用在字符串或是数字语境中而定。

mysql> SELECT CURTIME();
-> '23:50:26'
mysql> SELECT CURTIME() + 0;
-> 235026

◆ CURRENT_TIME, CURRENT_TIME()

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

◆ CURRENT_TIMESTAMP, CURRENT_TIMESTAMP()

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

◆ DATE(expr)

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

mysql> SELECT DATE('2003-12-31 01:02:03');
-> '2003-12-31'

◆ DATEDIFF(expr,expr2)

DATEDIFF() 回来开始时刻 expr和完毕时刻expr2之间的天数。Expr和expr2 为日期或 date-and-time 表达式。核算中只用到这些值的日期部分。

mysql> SELECT DATEDIFF('1997-12-31 23:59:59','1997-12-30');
-> 1
mysql> SELECT DATEDIFF('1997-11-30 23:59:59','1997-12-31');
-> -31

◆ DATE_ADD(date,INTERVAL expr type) DATE_SUB(date,INTERVAL expr type)

这些函数履行日期运算。 date 是一个 DATETIME 或DATE值,用来指定开始时刻。 expr 是一个表达式,用来指定从开始日期增加或减去的时刻距离值。 Expr是一个字符串;关于负值的时刻距离,它能够以一个 ‘-’最初。 type 为关键词,它指示了表达式被解说的方法。

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

以下表显现了type 和expr 参数的联系:

MySQL内置函数中的日期和时刻函数详解(mysql中时间函数)  日期 时间 函数 内置函数 MySQL 数据库 第1张

MySQL 答应任何expr 格局中的标点分隔符。表中所显现的是主张的 分隔符。若 date 参数是一个 DATE 值,而你的核算只会包含 YEAR、MONTH和DAY部分(即, 没有时刻部分), 其成果是一个DATE 值。不然,成果将是一个 DATETIME值。

若坐落另一端的表达式是一个日期或日期时刻值 , 则INTERVAL expr type只答应在 + 操作符的两头。关于 –操作符, INTERVAL expr type 只答应在其右端,原因是从一个时刻距离中提取一个日期或日期时刻值是毫无含义的。 (见下面的比如)。

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'
mysql> SELECT DATE_ADD('1992-12-31 23:59:59.000002',
-> INTERVAL '1.999999' SECOND_MICROSECOND);
-> '1993-01-01 00:00:01.000001'

#p#

若你指定了一个过于短的时刻距离值 (不包含type 关键词所预期的避实就虚时刻距离部分), MySQL 假定你现已省去了时刻距离值的最左部分。 例如,你指定了一种类型的DAY_SECOND, expr 的值预期应当具有天、 小时、分钟和秒部分。若你指定了一个相似 '1:10'的值, MySQL 假定天和小时部分不存在,那么这个值代表分和秒。换言之, '1:10' DAY_SECOND 被解说为相当于 '1:10' MINUTE_SECOND。这相当于 MySQL将TIME 值解说为所消耗的时刻而不是日时的解说方法。

假设你对一个日期值增加或减去一些含有时刻部分的内容,则成果主动转化为一个日期时刻值:

mysql> SELECT DATE_ADD('1998-01-02', INTERVAL 31 DAY);
-> '1998-02-02'
mysql> SELECT ADDDATE('1998-01-02', INTERVAL 31 DAY);
-> '1998-02-02'0

假设你运用了格局严重错误的日期,则成果为 NULL。假设你增加了 MONTH、YEAR_MONTH或YEAR ,而成果日期中有一天的日期大于增加的月份的日期***极限,则这个日期主动被调整为增加月份的***日期:

mysql> SELECT DATE_ADD('1998-01-02', INTERVAL 31 DAY);
-> '1998-02-02'
mysql> SELECT ADDDATE('1998-01-02', INTERVAL 31 DAY);
-> '1998-02-02'1

◆ DATE_FORMAT(date,format)

依据format 字符串组织date 值的格局。

以下阐明符可用在 format 字符串中:

阐明符

阐明

%a

工作日的缩写称号 (Sun..Sat)

%b

月份的缩写称号 (Jan..Dec)

%c

月份,数字方式(0..12)

%D

带有英语后缀的该月日期 (0th,1st,2nd,3rd, ...)

%d

该月日期,数字方式(00..31)

%e

该月日期,数字方式(0..31)

%f

微秒(000000..999999)

%H

转载请说明出处
知优网 » MySQL内置函数中的日期和时刻函数详解(mysql中时间函数)

发表评论

您需要后才能发表评论