mysql中TIMESTAMPDIFF案例详解

吾爱主题 阅读:103 2024-04-02 08:04:50 评论:0

1.  Syntax

TIMESTAMPDIFF(unit,begin,end); 根据单位返回时间差,对于传入的begin和end不需要相同的数据结构,可以存在一个为Date一个DateTime

2. Unit

支持的单位有

  • MICROSECOND
  • SECOND
  • MINUTE
  • HOUR
  • DAY
  • WEEK
  • MONTH
  • QUARTER
  • YEAR

3. Example

下面这个例子是对于TIMESTAMPDIFF最基本的用法,

  • 3.1 求 2017-01-01 - 2017-02-01 之间有几个月
?
1 2 3 4 5 6 7 8 SELECT TIMESTAMPDIFF( MONTH , '2017-01-01' , '2017-02-01' ) as  result;   + --------+ | result | + --------+ | 1 | + --------+ 1 row in set (0.00 sec)
  • 3.2 求 2017-01-01 - 2017-02-01 之间有几天
?
1 2 3 4 5 6 7 8 SELECT TIMESTAMPDIFF( DAY , '2017-01-01' , '2017-02-01' ) as  result;   + --------+ | result | + --------+ | 31 | + --------+ 1 row in set (0.00 sec)
  •  3.3 求 2017-01-01 08: 00:00 - 2017-01-01 08: 55:00 之间有几分钟
?
1 2 3 4 5 6 7 8 SELECT TIMESTAMPDIFF( MINUTE , '2017-01-01 08:00:00' , '2017-01-01 08:55:00' ) result;   + --------+ | result | + --------+ | 55 | + --------+ 1 row in set (0.00 sec)
  •  3.4 求 2017-01-01 08: 00:00 - 2017-01-01 08: 55:33 之间有几分钟
?
1 2 3 4 5 6 7 8 SELECT TIMESTAMPDIFF(MINUTE, '2017-01-01 08:00:00', '2017-01-01 08:55:33') result;   +--------+ | result | +--------+ | 55 | +--------+ 1 row in set (0.00 sec)
  •  3.5 对于DAY, MINUTE进行计算DIFF时,会直接将相对应的DAY,MINUTE相减

  • 3.6 对于 SECOND 会怎样计算呢
?
1 2 3 4 5 6 7 8 9 SELECT TIMESTAMPDIFF( SECOND , '2017-01-01 08:00:00' , '2017-01-01 08:55:33' ) result;   55 * 60 + 33 = 3333 + --------+ | result | + --------+ |   3333 | + --------+ 1 row in set (0.00 sec)
  • 3.7 如何求数据库中两个date字段的diff
    • 3.7.1  建表 ?
      1 2 CREATE TABLE demo (id INT AUTO_INCREMENT PRIMARY KEY , start_time DATE NOT NULL , end_time DATE NOT NULL ); Query OK, 0 rows affected (0.10 sec)
    • 3.7.2  添加数据 ?
      1 2 3 4 5 6 INSERT INTO demo(start_time, end_time) VALUES ( '1983-01-01' , '1990-01-01' ), ( '1983-01-01' , '1989-06-06' ), ( '1983-01-01' , '1985-03-02' ), ( '1983-01-01' , '1992-05-05' ), ( '1983-01-01 11:12:11' , '1995-12-01' );
    • 3.7.3 直接query数据 ?
      1 2 3 4 5 6 7 8 9 10 11 select * from demo; + ----+------------+------------+ | id | start_time | end_time | + ----+------------+------------+ | 1 | 1983-01-01 | 1990-01-01 | | 2 | 1983-01-01 | 1989-06-06 | | 3 | 1983-01-01 | 1985-03-02 | | 4 | 1983-01-01 | 1992-05-05 | | 5 | 1983-01-01 | 1995-12-01 | + ----+------------+------------+ 5 rows in set (0.00 sec)
    • 3.7.4 计算duration ?
      1 2 3 4 5 6 7 8 9 10 11 12 select *, TIMESTAMPDIFF( YEAR , start_time, end_time) as duration from demo;   + ----+------------+------------+----------+ | id | start_time | end_time | duration | + ----+------------+------------+----------+ | 1 | 1983-01-01 | 1990-01-01 | 7 | | 2 | 1983-01-01 | 1989-06-06 | 6 | | 3 | 1983-01-01 | 1985-03-02 | 2 | | 4 | 1983-01-01 | 1992-05-05 | 9 | | 5 | 1983-01-01 | 1995-12-01 | 12 | + ----+------------+------------+----------+ 5 rows in set (0.00 sec)
    • 3.7.5 其他应用 ?
      1 2 3 4 5 6 7 8 9 10 11 12 select *, if(TIMESTAMPDIFF( YEAR , end_time, CURRENT_TIMESTAMP ())< 26 , '< 26' , '>= 26' ) as result from demo;   + ----+------------+------------+--------+ | id | start_time | end_time | result | + ----+------------+------------+--------+ | 1 | 1983-01-01 | 1990-01-01 | >= 26 | | 2 | 1983-01-01 | 1989-06-06 | >= 26 | | 3 | 1983-01-01 | 1985-03-02 | >= 26 | | 4 | 1983-01-01 | 1992-05-05 | < 26 | | 5 | 1983-01-01 | 1995-12-01 | < 26 | + ----+------------+------------+--------+ 5 rows in set (0.00 sec)

到此这篇关于mysql中TIMESTAMPDIFF案例详解的文章就介绍到这了,更多相关mysql中TIMESTAMPDIFF内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/baiyaoliang7445/article/details/102218767

可以去百度分享获取分享代码输入这里。
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

【腾讯云】云服务器产品特惠热卖中
搜索
标签列表
    关注我们

    了解等多精彩内容