我想计算开始时间和结束时间之间的总秒数。显然,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
不属于。