最新消息: 新版网站上线了!!!

mysql 中时间日期函数

MYSQL中提供了NOW()函数用于取得当前的日期时间,NOW()函数还有SYSDATE()、

CURRENT_TIMESTAMP等别名。如

mysql> SELECT NOW(),SYSDATE(),CURRENT_TIMESTAMP;

+---------------------+---------------------+---------------------+

| NOW()               | SYSDATE()           | CURRENT_TIMESTAMP   |

+---------------------+---------------------+---------------------+

| 2014-08-24 14:58:23 | 2014-08-24 14:58:23 | 2014-08-24 14:58:23 |

+---------------------+---------------------+---------------------+

 

如果想得到不包括时间部分的当前日期,则可以使用CURDATE()函数,CURDATE()

函数还有CURRENT_DATE等别名。如

mysql> SELECT CURDATE(),CURRENT_DATE ;

+------------+--------------+

| CURDATE()  | CURRENT_DATE |

+------------+--------------+

| 2014-08-24 | 2014-08-24   |

+------------+--------------+

 

如果想得到不包括日期部分的当前时间,则可以使用CURTIME()函数,CURTIME ()

函数还有CURRENT_TIME等别名。

mysql> SELECT CURTIME(),CURRENT_TIME;

+-----------+--------------+

| CURTIME() | CURRENT_TIME |

+-----------+--------------+

| 15:03:56  | 15:03:56     |

+-----------+--------------+

 

时间增减运算

 

MYSQL中提供了DATE_ADD()函数用于进行日期时间的加法运算,这个函数还有一个别名为ADDDATE(),、DATE_ADD()函数的参数格式如下:

DATE_ADD (date,INTERVAL expr type)其中参数date为待计算的日期;参数expr为待进行加法运算的增量,它可以是数值类型

或者字符串类型,取决于type参数的取值;参数type则为进行加法运算的单位,type参数可选值以及对应的expr参数的格式如下表:

 

type参数值expr参数的格式说明

 

MICROSECOND 数值类型 以微秒为计算单位

SECOND      数值类型 以秒为计算单位

MINUTE      数值类型 以分钟为计算单位

HOUR        数值类型 以小时为计算单位

DAY         数值类型 以天为计算单位

WEEK        数值类型 以周为计算单位

MONTH       数值类型 以月为计算单位

QUARTER     数值类型 以季度为计算单位

YEAR        数值类型 以年为计算单位

 

SECOND_MICROSECOND   字符串类型,格式为:'SECONDS.MICROSECONDS'

以秒、微秒为计算单位,要求expr参数必须是“秒.微秒”的格式,比如“30.10”表示增加30秒10微秒。

 

 

MINUTE_MICROSECOND   字符串类型,格式为:'MINUTES.MICROSECONDS'

以分钟、毫秒为计算单位,要求expr参数必须是“分钟.微秒”的格式,比如“30.10”表示增加30分钟10微秒。

 

 

MINUTE_SECOND        字符串类型,格式为:'MINUTES:SECONDS'

以分钟、秒为计算单位,要求expr参数必须是“分钟:秒”的格式,比如“30:10”表示增加30分钟10秒。

 

HOUR_MICROSECOND    字符串类型,格式为:'HOURS.MICROSECONDS'

以小时、微秒为计算单位,要求expr参数必须是“小时.微秒”的格式,比如“30.10”表示增加30小时10微秒。

 

HOUR_SECOND        字符串类型,格式为:'HOURS:MINUTES:SECONDS'

以小时、分钟、秒为计算单位,要求expr参数必须是“小时:分钟:秒”的格式,比如“1:30:10”表示增加1小时30分钟10秒。

 

HOUR_MINUTE        字符串类型,格式为:'HOURS:MINUTES'

以小时、秒为计算单位,要求expr参数必须是“小时:秒”的格式,比如“30:10”表示增加30小时10秒。

 

DAY_MICROSECOND    字符串类型,格式为:'DAYS.MICROSECONDS'

以天、微秒为计算单位,要求expr参数必须是“天.微秒”的格式,比如“30.10”表示增加30天10微秒。

 

DAY_SECOND        字符串类型,格式为:'DAYSHOURS:MINUTES:SECONDS'

以天、小时、分钟、秒为计算单位,要求expr参数必须是“天小时:分钟:秒”的格式,比如“1 3:28:36”表示增加1天3小时28分钟36秒。

 

DAY_MINUTE      字符串类型,格式为:'DAYSHOURS:MINUTES'

以天、小时、分钟为计算单位,要求expr参数必须是“天小时:分钟”的格式,比如“1 3:15”表示增加1天3小时15分钟。

 

DAY_HOUR       字符串类型,格式为:'DAYS HOURS'

以天、小时为计算单位,要求expr参数必须是“天小时”的格式,比如“30 10”表示增加30天10小时。

 

 

YEAR_MONTH     字符串类型,格式为:'YEARS-MONTHS'

以年、月为计算单位,要求expr参数必须是“年-月”的格式,比如“2-8”表示增加2年8个月。

 

 

表中前九种用法都非常简单,比如DATE_ADD(date,INTERVAL 1 HOUR)就可以得到在

日期date基础上增加一小时后的日期时间,而DATE_ADD(date,INTERVAL 1WEEK)就可以

得到在日期date基础上增加一周后的日期时间。下面的SQL语句用来计算每个人出生一周、

两个月以及5个季度后的日期:

SELECT FBirthDay,

DATE_ADD(FBirthDay,INTERVAL 1 WEEK) as w1,

DATE_ADD(FBirthDay,INTERVAL 2 MONTH) as m2,

DATE_ADD(FBirthDay,INTERVAL 5 QUARTER) as q5

FROM T_Person

执行完毕我们就能在输出结果中看到下面的执行结果:

FBirthDay w1 m2 q5

1981-03-22 00:00:00 1981-03-29 00:00:00 1981-05-22 00:00:00 1982-06-22 00:00:00

1987-01-18 00:00:00 1987-01-25 00:00:00 1987-03-18 00:00:00 1988-04-18 00:00:00

1987-11-08 00:00:00 1987-11-15 00:00:00 1988-01-08 00:00:00 1989-02-08 00:00:00

1982-07-12 00:00:00 1982-07-19 00:00:00 1982-09-12 00:00:00 1983-10-12 00:00:00

1983-02-16 00:00:00 1983-02-23 00:00:00 1983-04-16 00:00:00 1984-05-16 00:00:00

1984-08-07 00:00:00 1984-08-14 00:00:00 1984-10-07 00:00:00 1985-11-07 00:00:00

1980-01-09 00:00:00 1980-01-16 00:00:00 1980-03-09 00:00:00 1981-04-09 00:00:00

1972-07-18 00:00:00 1972-07-25 00:00:00 1972-09-18 00:00:00 1973-10-18 00:00:00

相对于前九种用法来说,后面几种用法就相对复杂一些,需要根据格式化的类型来决定

expr参数的值。比如如果想为日期增加3天2小时10分钟,那么就可以如下使用DATE_ADD()

函数:

DATE_ADD(date,INTERVAL '3 2:10' DAY_MINUTE)

比如下面的SQL语句分别计算出生日期后3天2小时10分钟、1年6个月的日期时间:

SELECT FBirthDay,

DATE_ADD(FBirthDay,INTERVAL '3 2:10' DAY_MINUTE) as dm,

DATE_ADD(FBirthDay,INTERVAL '1-6' YEAR_MONTH) as ym

FROM T_Person

执行完毕我们就能在输出结果中看到下面的执行结果:

FBirthDay dm ym

1981-03-22 00:00:00 1981-03-25 02:10:00 1982-09-22 00:00:00

1987-01-18 00:00:00 1987-01-21 02:10:00 1988-07-18 00:00:00

1987-11-08 00:00:00 1987-11-11 02:10:00 1989-05-08 00:00:00

1982-07-12 00:00:00 1982-07-15 02:10:00 1984-01-12 00:00:00

1983-02-16 00:00:00 1983-02-19 02:10:00 1984-08-16 00:00:00

1984-08-07 00:00:00 1984-08-10 02:10:00 1986-02-07 00:00:00

1980-01-09 00:00:00 1980-01-12 02:10:00 1981-07-09 00:00:00

1972-07-18 00:00:00 1972-07-21 02:10:00 1974-01-18 00:00:00

几乎所有版本的MYSQL都支持DATE_ADD()函数的前九种用法,但是MYSQL的早期

版本不完全支持DATE_ADD()函数的后几种用法,不过在MYSQL的早期版本中可以嵌套调用

DATE_ADD()函数来实现后几种用法的效果。下面的SQL语句使用嵌套函数的方式来分别计算出

生日期后1年6个月的日期时间:

SELECT FBirthDay,

DATE_ADD(DATE_ADD(FBirthDay,INTERVAL 1 YEAR),INTERVAL 6 MONTH) as dm

FROM T_Person

执行完毕我们就能在输出结果中看到下面的执行结果:

FBirthDay dm

1981-03-22 00:00:00 1982-09-22 00:00:00

1987-01-18 00:00:00 1988-07-18 00:00:00

1987-11-08 00:00:00 1989-05-08 00:00:00

1982-07-12 00:00:00 1984-01-12 00:00:00

1983-02-16 00:00:00 1984-08-16 00:00:00

1984-08-07 00:00:00 1986-02-07 00:00:00

1980-01-09 00:00:00 1981-07-09 00:00:00

1972-07-18 00:00:00 1974-01-18 00:00:00

DATE_ADD()函数不仅可以用来在日期基础上增加指定的时间段,而且还可以在日期基础

上减少指定的时间段,只要在expr参数中使用负数就可以,下面的SQL语句用来计算每个人出

生一周、两个月以及5个季度前的日期:

SELECT FBirthDay,

DATE_ADD(FBirthDay,INTERVAL -1 WEEK) as w1,

DATE_ADD(FBirthDay,INTERVAL -2 MONTH) as m2,

DATE_ADD(FBirthDay,INTERVAL -5 QUARTER) as q5

FROM T_Person

执行完毕我们就能在输出结果中看到下面的执行结果:

FBirthDay w1 m2 q5

1981-03-22 00:00:00 1981-03-15 00:00:00 1981-01-22 00:00:00 1979-12-22 00:00:00

1987-01-18 00:00:00 1987-01-11 00:00:00 1986-11-18 00:00:00 1985-10-18 00:00:00

1987-11-08 00:00:00 1987-11-01 00:00:00 1987-09-08 00:00:00 1986-08-08 00:00:00

1982-07-12 00:00:00 1982-07-05 00:00:00 1982-05-12 00:00:00 1981-04-12 00:00:00

1983-02-16 00:00:00 1983-02-09 00:00:00 1982-12-16 00:00:00 1981-11-16 00:00:00

1984-08-07 00:00:00 1984-07-31 00:00:00 1984-06-07 00:00:00 1983-05-07 00:00:00

1980-01-09 00:00:00 1980-01-02 00:00:00 1979-11-09 00:00:00 1978-10-09 00:00:00

1972-07-18 00:00:00 1972-07-11 00:00:00 1972-05-18 00:00:00 1971-04-18 00:00:00

在MYSQL中提供了DATE_SUB()函数用于计算指定日期前的特定时间段的日

期,其效果和在DATE_ADD()函数中使用负数的expr参数值的效果一样,其用法也和

DATE_ADD()函数几乎相同。下面的SQL语句用来计算每个人出生一周、两个月以及3天2小

时10分钟前的日期:

SELECT FBirthDay,

DATE_SUB(FBirthDay,INTERVAL 1 WEEK) as w1,

DATE_SUB(FBirthDay,INTERVAL 2 MONTH) as m2,

DATE_SUB(FBirthDay, INTERVAL '3 2:10' DAY_MINUTE) as dm

FROM T_Person

执行完毕我们就能在输出结果中看到下面的执行结果:

FBirthDay w1 m2 dm

1981-03-22 00:00:00 1981-03-15 00:00:00 1981-01-22 00:00:00 1981-03-18 21:50:00

1987-01-18 00:00:00 1987-01-11 00:00:00 1986-11-18 00:00:00 1987-01-14 21:50:00

1987-11-08 00:00:00 1987-11-01 00:00:00 1987-09-08 00:00:00 1987-11-04 21:50:00

1982-07-12 00:00:00 1982-07-05 00:00:00 1982-05-12 00:00:00 1982-07-08 21:50:00

1983-02-16 00:00:00 1983-02-09 00:00:00 1982-12-16 00:00:00 1983-02-12 21:50:00

1984-08-07 00:00:00 1984-07-31 00:00:00 1984-06-07 00:00:00 1984-08-03 21:50:00

1980-01-09 00:00:00 1980-01-02 00:00:00 19

.....

转载请注明:谷谷点程序 » mysql 中时间日期函数