首页 / 数据库 / MySQL / MySQL内置函数中的日期和时间函数详解
MySQL内置函数中的日期和时间函数详解2010-07-07下面的例子使用了时间函数。以下询问选择了最近的 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"
> 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"之类的指定时间区,首先要设置正确的时区表。