TIMESTAMPDIFF

语法:TIMESTAMPDIFF(interval,datetime_expr1,datetime_expr2)

说明:返回日期或日期时间表达式datetime_expr1 和datetime_expr2the 之间的整数差。其结果的单位由interval 参数给出。该参数必须是以下值的其中一个:

  1. FRAC_SECOND。表示间隔是毫秒
  2. SECOND。秒
  3. MINUTE。分钟
  4. HOUR。小时
  5. DAY。天
  6. WEEK。星期
  7. MONTH。月
  8. QUARTER。季度
  9. YEAR。年

使用范例:

$sql = "SELECT d_userid FROM d_needs WHERE addtime BETWEEN '".$stime."' AND '".$etime."'  AND TIMESTAMPDIFF(MINUTE,d_stime,d_etime) < '".$finish_time."' GROUP BY d_userid";

意思是想要查到开始和结束时间差小于5分钟的人,直接可以作为条件使用

求两者之间的天数
select TIMESTAMPDIFF(DAY, '2020-5-1 09:00:00', '2020-5-8 07:00:00')
求两者之间的小时
select TIMESTAMPDIFF(HOUR, '2020-5-1 09:00:00', '2020-5-8 07:00:00')
求两者之间的分钟
select TIMESTAMPDIFF(MINUTE, '2020-5-1 09:00:00', '2020-5-8 07:00:00')
求两者之间的秒
select TIMESTAMPDIFF(SECOND, '2020-5-1 09:00:00', '2020-5-8 07:00:00')
select timestampdiff(YEAR,"2018-01-01 15:15:16","2019-08-23 15:15:16") as timestamodiff;
//结果1。相差一年。
select timestampdiff(YEAR,"2019-08-22 15:15:19","2018-12-23 15:15:16") as timestamodiff;
//结果 -1,也是相差一年。
select timestampdiff(YEAR,"2019-08-22 15:15:19","2018-08-22 15:15:16") as timestamodiff; 
//结果0,相差不到一年

select timestampdiff(MONTH,"2018-08-22 15:15:16","2018-07-23 15:15:16") as timestamodiff;
// 结果 0 相差不到一个月
select timestampdiff(MONTH,"2018-08-22 15:15:16","2018-07-01 15:15:16") as timestamodiff;
// 结果 -1 相差一个月
select timestampdiff(MONTH,"2018-08-22 15:15:19","2018-09-23 15:15:16") as timestamodiff; 
// 结果 1 想差一个月

select timestampdiff(DAY,"2018-08-22 15:15:16","2018-08-23 15:15:16") as timestamodiff;
// 结果 1 想差一天
select timestampdiff(DAY,"2018-08-22 15:15:19","2018-08-23 15:15:16") as timestamodiff;
// 结果 0 想差不到一天
select timestampdiff(DAY,"2018-08-23 15:15:19","2018-08-22 15:15:16") as timestamodiff;
// 结果 -1 想差一天

DATEDIFF

DATEDIFF() 函数返回两个日期之间的天数。
SQL语句的写法:

select datediff('2020-5-1 09:00:00', '2020-5-8 07:00:00');

返回结果为2

SELECT DATEDIFF('2018-05-09 08:00:00','2018-05-09') AS DiffDate;
//结果 0 ; 表示 2018-05-09 与 2018-05-09之间没有日期差。这里是不比较时分秒的。下面验证带上时分秒有没有差别。
SELECT DATEDIFF('2018-05-09 00:00:00','2018-05-09 23:59:59') AS DiffDate;
//结果 0 ;
SELECT DATEDIFF('2018-05-08 23:59:59','2018-05-09 00:00:00') AS DiffDate;
//结果 -1;
SELECT DATEDIFF('2018-05-09 00:00:00','2018-05-08 23:59:59') AS DiffDate;
//结果 1;

TIMESTAMPDIFF和DATEDIFF的区别

datediff函数用于计算两个时间的日期差,timestampdiff用于计算两个时间的指定单位的时间差,这个单位可以是 年,季度,月,日,时,分,秒等等。 这个同事,就是分别用的datediff(d1,d2) 和timestampdiff(day,d1,d2)来计算两个日期之间的差别。结果却出现一个隐藏的bug. 具体原因如下:

datediff 计算日期差的时候,是使用d1-d2的方式计算的,而timestampdiff 则使用 d2-d1的方式。 所以同样的日期,用两个函数来计算天数的差异,就会出现一个正值,一个负值的情况。这个问题非常的隐秘,一般都不会注意其中的差异。一不小心就有可能出错。