本章论述了一些可用于操作时间值的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); |
若 days 参数仅仅整数值,则 MySQL 5.1将其作为天数值增加至 expr。
mysql> SELECT ADDDATE('1998-01-02', 31); |
◆ ADDTIME(expr,expr2)
ADDTIME()将 expr2增加至expr 然后回来成果。 expr 是一个时刻或时刻日期表达式,而expr2 是一个时刻表达式。
mysql> SELECT ADDTIME('1997-12-31 23:59:59.999999', |
◆ 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'); |
注释:若要运用比如 'MET'或 'Europe/Moscow'之类的指定时刻区,首先要设置正确的时区表。
◆ CURDATE()
将当时日期依照'YYYY-MM-DD' 或YYYYMMDD 格局的值回来,详细格局依据函数用在字符串或是数字语境中而定。
mysql> SELECT CURDATE(); |
◆ CURRENT_DATE CURRENT_DATE()
CURRENT_DATE和CURRENT_DATE()是的近义词.
◆ CURTIME()
将当时时刻以'HH:MM:SS'或 HHMMSS 的格局回来, 详细格局依据函数用在字符串或是数字语境中而定。
mysql> SELECT CURTIME(); |
◆ 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'); |
◆ DATEDIFF(expr,expr2)
DATEDIFF() 回来开始时刻 expr和完毕时刻expr2之间的天数。Expr和expr2 为日期或 date-and-time 表达式。核算中只用到这些值的日期部分。
mysql> SELECT DATEDIFF('1997-12-31 23:59:59','1997-12-30'); |
◆ DATE_ADD(date,INTERVAL expr type) DATE_SUB(date,INTERVAL expr type)
这些函数履行日期运算。 date 是一个 DATETIME 或DATE值,用来指定开始时刻。 expr 是一个表达式,用来指定从开始日期增加或减去的时刻距离值。 Expr是一个字符串;关于负值的时刻距离,它能够以一个 ‘-’最初。 type 为关键词,它指示了表达式被解说的方法。
关键词INTERVA及 type 分类符均不区别大小写。
以下表显现了type 和expr 参数的联系:
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; |
#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); |
假设你运用了格局严重错误的日期,则成果为 NULL。假设你增加了 MONTH、YEAR_MONTH或YEAR ,而成果日期中有一天的日期大于增加的月份的日期***极限,则这个日期主动被调整为增加月份的***日期:
mysql> SELECT DATE_ADD('1998-01-02', INTERVAL 31 DAY); |
◆ 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中时间函数)