我可以在MySQL的TIMESTAMPDIFF函数中使用sub Select代替DateTime表达式吗?



我想计算开始时间和结束时间之间的总秒数。显然,MySQL中的TIMESTAMPDIFF
DateTime表达式配合得很好

SELECT TIMESTAMPDIFF(SECOND,'2018-10-30 04:45:42','2018-10-30 06:01:42');

但我想做的是使用"子选择"替换表达式。但我犯了错误

SELECT TIMESTAMPDIFF(SECOND,
(SELECT TIMESTAMP(start_time) 
FROM shift 
WHERE TIME(NOW()) >= start_time AND 
TIME(NOW()) <= end_time) AS start_time, NOW())

所以我的问题是,有可能用子选择取代TIMESTAMPDIFF中的DateTime表达式吗?我怎样才能做到这一点?

更新:TIMESTAMPDIFF中的子选择返回标量值,即时间戳,即2018-10-30 06:00:00

可以,但子查询需要是标量子查询。标量子查询返回一列,最多返回一行。您可以使用limit 1或聚合函数(不使用group by(来完成此操作。

大概,您想要这样的查询:

select TIMESTAMPDIFF(SECOND, TIMESTAMP(start_time), NOW())
from shift
where TIME(NOW()) >= start_time and TIME(NOW()) <= end_time;

编辑:

如果您有一个标量子查询,那么:

SELECT TIMESTAMPDIFF(SECOND,
(SELECT TIMESTAMP(start_time) 
FROM shift 
WHERE TIME(NOW()) >= start_time AND 
TIME(NOW()) <= end_time
), NOW()
) 

as start_time不属于。

最新更新