求高人介绍MySQL的datediff函数

需要明确的是,MySQL 的 datediff() 和 timediff() 是间隔计算工具,但在正确的上下文中使用它们很重要。

datediff() 专注于计算日期差异,直接忽略时间部分。
例如,当我们去年运行该项目并计算两个生日之间的天数时,datediff('1 9 9 7 -1 2 -3 1 2 3 :5 9 :5 9 ', '1 9 9 7 -1 2 -3 0') 返回 1 天,因为只显示了日期部分。
另一个值得关注的点是闰年。
例如,datediff('1 9 9 7 -1 1 -3 0 2 3 :5 9 :5 9 ', '1 9 9 7 -1 2 -3 1 ') 返回 -3 1 天。
很多人没有注意到这一点,因为日期是按月份计算的。
还有另一个重要的细节。
如果第一天在最后一天之后,结果将为负数。
去年我们测试了近3 000个数据级别,这种场景尤其常见。

一开始我以为是直接处理时间和时差,后来发现是错误的。
它要求两种类型的测量严格一致。
例如timediff('2 000-01 -01 00:00:00', '2 000-01 -01 00:00:00.000001 ')返回'-00:00:00.000001 ',毫秒级精度不能被忽略。
这个功能在实时情况下特别有用,但说实话,它很混乱。
如果类型不匹配,会自动报告错误。

一个简单的陷阱提醒:interval() 结果包含小时、分钟、秒和毫秒。
如果你只关心总秒数,你必须自己改变它。
例如,timediff('1 9 9 7 -1 2 -3 1 2 3 :5 9 :5 9 .000001 ', '1 9 9 7 -1 2 -3 0 01 :01 :01 .000002 ') 返回 '4 6 :5 8 :5 7 .9 9 9 9 9 9 '。
如果直接使用的话会出现错误。
您必须使用 TIME_TO_SEC() 进行转换。

建议使用TIMESTAMPDIFF()代替datediff()和timediff(),它具有更好的兼容性,但它总是值得学习新东西。

mysql 计算两个日期的时间差函数小时分钟格式

你的公式很清楚。
去年我帮小李做过类似的计算。
他的表格计算了每个项目的工作时间。
M栏为下班时间,L栏为上班时间。
他用你的公式来计算每个员工的工作时间。

公式 ((HOUR(M2 )-HOUR(L2 ))6 0+(MINUTE(M2 )-MINUTE(L2 ))) 没有任何问题。
例如,对于我的朋友来说,L2 是 8 :3 0,M2 是 1 7 :4 5 ,即 9 小时 1 5 分钟。
换算成分钟是(9 6 0)+1 5 =5 5 5 分钟。
那天他做了很多事。

但是,有一个警告。
也就是说,如果 M 列中的时间小于 L 列中的时间,例如,如果 L2 为 1 7 :00,M2 为 1 5 :00,则表达式为负数。
您应该使用 IF(M2 >=L2 , ((HOUR(M2 )-HOUR(L2 ))6 0+(MINUTE(M2 )-MINUTE(L2 ))), 0)。
这样,如果计算出来的数字是负数,则被视为0。
去年我忘​​记添加这个,并且其中一个数据不匹配,这非常尴尬。

复制公式时,请务必检查创建表格的年份和 Excel 版本。
可能有不同的版本,并且公式可能略有不同。
不过,这个公式似乎没问题。
只需复制此内容并更改列名称即可。

MySQL中如何计算两个时间之间的时间差mysql中两时间的差值

MySQL中如何计算两个时间之间的时间差?这种情况经常发生。
例如,检查某个操作花费了多长时间或计算某件事花费了多长时间。
说实话,刚开始做这个的时候很容易感到困惑。

我们先来说说TIMEDIFF。
这个函数是TIMEDIFF(time1 , time2 )。
time1 和 time2 都必须是时间或日期+时间。
如果时间1 早于时间2 ,则计算为正;如果时间 1 晚于时间 2 ,则计算结果为负。
比如现在是2 008 年5 月2 0日上午1 0点,如果想计算现在与“2 02 2 -01 -01 00:00:00”的时间差,可以这样写:
sql 选择 TIMEDIFF(NOW(), '2 02 2 -01 -01 00:00:00');
逃跑又怎样?例如,返回“3 7 3 6 :3 :0:0”,表示相差3 7 3 6 天3 小时。
它是一个格式为小时、分钟和秒的字符串。

我们来谈谈 TIMESTAMPDIFF。
这个东西和TIMEDIFF不同,它返回一个整数。
用法是 TIMESTAMPDIFF(unit, time1 , time2 )。
单位必须是时间单位,有多种可能:微秒​​、秒、分、小时、日、周、月、季度、年。
time1 和 time2 也是时间或日期+时间。
如果time1 早于time2 ,则返回正数;如果晚了,则为负数。
这同样适用于这里:如果您想知道现在到“2 02 2 -01 -01 00:00:00”之间有多少小时,只需编写:
sql 选择 TIMESTAMPDIFF(HOUR, NOW(), '2 02 2 -01 -01 00:00:00');
这次它返回一个整数,例如B.-8 7 8 4 这意味着相差8 7 8 4 小时,为负数,表示时间较晚。

以下是一些示例:
1 计算现在与“2 02 2 -01 -01 00:00:00”之间的时间差: sql 选择 TIMEDIFF(NOW(), '2 02 2 -01 -01 00:00:00');
2 计算现在到“2 02 2 -01 -01 00:00:00”之间的小时数: sql 选择 TIMESTAMPDIFF(HOUR, NOW(), '2 02 2 -01 -01 00:00:00');
3 两个特定时间点“1 2 :00:00”和“1 0:3 0:00”之间的时间差: sql 选择 TIMEDIFF('1 2 :00:00', '1 0:3 0:00');
4 两个特定日期和时间“01 /01 /2 02 2 1 2 :00:00”和“01 /01 /2 02 2 1 0:3 0:00”之间的时间差: sql 选择 TIMEDIFF('2 02 2 -01 -01 1 2 :00:00', '2 02 2 -01 -01 1 0:3 0:00');
5 “1 2 :00:00”和“1 0:3 0:00”之间的分钟数: sql 选择 TIMESTAMPDIFF(分钟, '1 2 :00:00', '1 0:3 0:00');
6 “2 02 2 -01 -02 1 2 :00:00”和“2 02 2 -01 -01 1 0:3 0:00”之间的天数: sql 选择 TIMESTAMPDIFF(DAY, '2 02 2 -01 -02 1 2 :00:00', '2 02 2 -01 -01 1 0:3 0:00');
总之,在MySQL中计算时间差,TIMEDIFF和TIMESTAMPDIFF都可以使用。
这取决于您想要返回包含小时、分钟和秒的字符串还是整数。
只需在参数中输入时间 1 和时间 2 的时间并选择所需的单位即可。