mysql时间戳diff函数_MySQL timestampdiff()函数

在本教程中,您将学习如何使用MySQL IMESTAMPDIFF函数来计算两个DATE或DATETIME值之间的差值。

MySQL TIMESTAMPDIFF函数简介

下面说明了TIMESTAMPDIFF函数的语法。

TIMESTAMPDIFF(unit,begin,end);

TIMESTAMPDIFF函数返回begin-end的结果,其中begin和end是DATE或DATETIME表达式。

TIMESTAMPDIFF函数允许其参数具有混合类型,例如,begin是DATE值,end可以是DATETIME值。 如果使用DATE值,则TIMESTAMPDIFF函数将其视为时间部分为“00:00:00”的DATETIME值。

unit参数是确定(end-begin)的结果的单位,表示为整数。 以下是有效单位:

MICROSECOND

SECOND

MINUTE

HOUR

DAY

WEEK

MONTH

QUARTER

YEAR

MySQL TIMESTAMPDIFF函数示例

以下示例将以月份值的形式返回2018-01-01和2018-06-01的差值:

mysql> SELECT TIMESTAMPDIFF(MONTH, '2018-01-01', '2018-06-01') result;

+--------+

| result |

+--------+

| 5 |

+--------+

1 row in set

如果您希望看到差值,只需要将unit参数从MONTH更改为DAY,如下所示:

mysql> SELECT TIMESTAMPDIFF(DAY, '2010-01-01', '2010-06-01') result;

+--------+

| result |

+--------+

| 151 |

+--------+

1 row in set

以下语句返回两个DATETIME值(以分钟为单位)的差异值:

mysql> SELECT TIMESTAMPDIFF(MINUTE, '2018-01-01 10:00:00', '2018-01-01 10:45:00') result;

+--------+

| result |

+--------+

| 45 |

+--------+

1 row in set

请注意,TIMESTAMPDIFF仅考虑与unit参数相关的时间部分。 请参阅以下示例:

mysql> SELECT TIMESTAMPDIFF(MINUTE, '2018-01-01 10:00:00', '2018-01-01 10:45:59') result;

+--------+

| result |

+--------+

| 45 |

+--------+

1 row in set

差值应该是45分59秒。 但是,我们将unit参数传递为MINUTE,因此,函数按预期返回45分钟。

如果使用SECOND而不是MINUTE,则TIMESTAMPDIFF函数将考虑SECOND部分,如以下示例所示:

mysql> SELECT TIMESTAMPDIFF(SECOND, '2018-01-01 10:00:00', '2018-01-01 10:45:59') result;

+--------+

| result |

+--------+

| 2759 |

+--------+

1 row in set

注:45分59秒= 45×60 + 59(秒)= 2759秒

使用MySQL TIMESTAMPDIFF函数计算年龄

首先,我们创建一个名为persons的新表,用于演示。

USE testdb;

CREATE TABLE persons (

id INT AUTO_INCREMENT PRIMARY KEY,

full_name VARCHAR(255) NOT NULL,

date_of_birth DATE NOT NULL

);

其次,向persons表中插入一些行:

INSERT INTO persons(full_name, date_of_birth)

VALUES('John Doe', '1990-01-01'),

('David Taylor', '1989-06-06'),

('Peter Drucker', '1985-03-02'),

('Lily Minsu', '1992-05-05'),

('Mary William', '1995-12-01');

第三步,使用TIMESTAMPDIFF来计算persons表中每个人的年龄:

SELECT

id,

full_name,

date_of_birth,

TIMESTAMPDIFF(YEAR,

date_of_birth,

'2018-01-01') age

FROM

persons;

执行上面查询语句,得到以下结果 -

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

| id | full_name | date_of_birth | age |

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

| 1 | John Doe | 1990-01-01 | 28 |

| 2 | David Taylor | 1989-06-06 | 28 |

| 3 | Peter Drucker | 1985-03-02 | 32 |

| 4 | Lily Minsu | 1992-05-05 | 25 |

| 5 | Mary William | 1995-12-01 | 22 |

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

5 rows in set

在此语句中,我们计算到2018-01-01日为止的年龄。如果要计算当前年龄,可以通过NOW函数替换字面值'2018-01-01',如下所示:

SELECT

id,

full_name,

date_of_birth,

TIMESTAMPDIFF(YEAR,

date_of_birth,

NOW()) age

FROM

persons;

执行上面查询语句,得到以下结果 -

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

| id | full_name | date_of_birth | age |

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

| 1 | John Doe | 1990-01-01 | 27 |

| 2 | David Taylor | 1989-06-06 | 28 |

| 3 | Peter Drucker | 1985-03-02 | 32 |

| 4 | Lily Minsu | 1992-05-05 | 25 |

| 5 | Mary William | 1995-12-01 | 21 |

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

5 rows in set

在写这篇文章时,当前日期是:2017-08-10

在本教程中,您学习了如何使用MySQL TIMESTAMPDIFF函数来计算两个DATE或DATETIME值之间的差值。

¥ 我要打赏

纠错/补充

收藏

加QQ群啦,易百教程官方技术学习群

注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值