如何获取两个日期之间的时间差(以小时为单位)

10

我想获取两个用户之间的时间差,需要以小时为单位计算。

我尝试使用DATEDIFF函数,但结果不正确。

这是我的代码:

SELECT DATEDIFF(*,  
(SELECT max(u1.time_c)
FROM users u)
,
(SELECT max(u2.time_c)
FROM users u2) 

2
你说的“两个用户之间的时间差”是什么意思?你是指他们的时区吗?还是其他什么?你说现有的代码是“错误的”,但没有说明错在哪里。我们应该猜测吗?(我的猜测是DATEDIFF()函数返回的是而不是小时的差异;而且只接受两个参数,而不是三个——但这是全部的问题吗?) - eggyal
如果u.1是2天前创建的,而u.2是昨天创建的,则它们之间的时间差为24小时,例如。 - Ofer
不够清晰,请添加更多信息。 - Devart
2个回答

16

来自MySQL DATEDIFF文档:

Only the date parts of the values are used in the calculation.
你需要查看 TIMEDIFF 函数。假设你的 time_c 字段是 DATETIME 或类似类型,该函数将为您提供两个时间差的小时数。
SELECT HOUR(TIMEDIFF(  
  (SELECT max(u1.time_c) FROM users u),
  (SELECT max(u2.time_c) FROM users u2)
)) 

3
你的select语句中必须有一个from子句。类似于:
Select date1 - date2 from dual

返回日期1和日期2之间的天数。

如果您想要小时数:

Select (date1 - date2)*24 from dual;

(这仅适用于Oracle)


我不明白你的问题,但如果你问的是结果类型,那么结果是一个浮点数,它代表第一个查询中的天数和第二个查询中的小时数。例如,0.5天表示12小时。另一个例子:0.2小时=0.2*60分钟=12分钟。 - Florin Ghita
如果日期差为零,会发生什么?如何获取小时数? - Sadikhasan
在这种情况下什么都不会发生。将会有零个小时。 - Florin Ghita

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,