• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
cnsdhzzl
博客园    首页    新随笔    联系   管理    订阅  订阅

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的差值:

  1.  
    mysql> SELECT TIMESTAMPDIFF(MONTH, '2018-01-01', '2018-06-01') result;
  2.  
    +--------+
  3.  
    | result |
  4.  
    +--------+
  5.  
    | 5 |
  6.  
    +--------+
  7.  
    1 row in set

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

  1.  
    mysql> SELECT TIMESTAMPDIFF(DAY, '2010-01-01', '2010-06-01') result;
  2.  
    +--------+
  3.  
    | result |
  4.  
    +--------+
  5.  
    | 151 |
  6.  
    +--------+
  7.  
    1 row in set

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

  1.  
    mysql> SELECT TIMESTAMPDIFF(MINUTE, '2018-01-01 10:00:00', '2018-01-01 10:45:00') result;
  2.  
    +--------+
  3.  
    | result |
  4.  
    +--------+
  5.  
    | 45 |
  6.  
    +--------+
  7.  
    1 row in set

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

  1.  
    mysql> SELECT TIMESTAMPDIFF(MINUTE, '2018-01-01 10:00:00', '2018-01-01 10:45:59') result;
  2.  
    +--------+
  3.  
    | result |
  4.  
    +--------+
  5.  
    | 45 |
  6.  
    +--------+
  7.  
    1 row in set

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

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

  1.  
    mysql> SELECT TIMESTAMPDIFF(SECOND, '2018-01-01 10:00:00', '2018-01-01 10:45:59') result;
  2.  
    +--------+
  3.  
    | result |
  4.  
    +--------+
  5.  
    | 2759 |
  6.  
    +--------+
  7.  
    1 row in set

 

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

使用MySQL TIMESTAMPDIFF函数计算年龄

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

  1.  
    USE testdb;
  2.  
    CREATE TABLE persons (
  3.  
    id INT AUTO_INCREMENT PRIMARY KEY,
  4.  
    full_name VARCHAR(255) NOT NULL,
  5.  
    date_of_birth DATE NOT NULL
  6.  
    );

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

  1.  
    INSERT INTO persons(full_name, date_of_birth)
  2.  
    VALUES('John Doe', '1990-01-01'),
  3.  
    ('David Taylor', '1989-06-06'),
  4.  
    ('Peter Drucker', '1985-03-02'),
  5.  
    ('Lily Minsu', '1992-05-05'),
  6.  
    ('Mary William', '1995-12-01');

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

  1.  
    SELECT
  2.  
    id,
  3.  
    full_name,
  4.  
    date_of_birth,
  5.  
    TIMESTAMPDIFF(YEAR,
  6.  
    date_of_birth,
  7.  
    '2018-01-01') age
  8.  
    FROM
  9.  
    persons;

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

  1.  
    +----+---------------+---------------+-----+
  2.  
    | id | full_name | date_of_birth | age |
  3.  
    +----+---------------+---------------+-----+
  4.  
    | 1 | John Doe | 1990-01-01 | 28 |
  5.  
    | 2 | David Taylor | 1989-06-06 | 28 |
  6.  
    | 3 | Peter Drucker | 1985-03-02 | 32 |
  7.  
    | 4 | Lily Minsu | 1992-05-05 | 25 |
  8.  
    | 5 | Mary William | 1995-12-01 | 22 |
  9.  
    +----+---------------+---------------+-----+
  10.  
    5 rows in set

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

  1.  
    SELECT
  2.  
    id,
  3.  
    full_name,
  4.  
    date_of_birth,
  5.  
    TIMESTAMPDIFF(YEAR,
  6.  
    date_of_birth,
  7.  
    NOW()) age
  8.  
    FROM
  9.  
    persons;

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

  1.  
    +----+---------------+---------------+-----+
  2.  
    | id | full_name | date_of_birth | age |
  3.  
    +----+---------------+---------------+-----+
  4.  
    | 1 | John Doe | 1990-01-01 | 27 |
  5.  
    | 2 | David Taylor | 1989-06-06 | 28 |
  6.  
    | 3 | Peter Drucker | 1985-03-02 | 32 |
  7.  
    | 4 | Lily Minsu | 1992-05-05 | 25 |
  8.  
    | 5 | Mary William | 1995-12-01 | 21 |
  9.  
    +----+---------------+---------------+-----+
  10.  
    5 rows in set
     
    https://blog.csdn.net/moakun/article/details/82528187
posted on 2019-06-24 14:58  cnsdhzzl  阅读(3029)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3