我想计算开始时间和结束时间之间的总秒数。很显然,TIMESTAMPDIFF
中的MySQL
使用
DateTime 这样的表达式
SELECT TIMESTAMPDIFF(SECOND,'2018-10-30 04:45:42','2018-10-30 06:01:42');
但是我要做的是使用Sub Selects替换表达式。但是我遇到了错误。
SELECT TIMESTAMPDIFF(SECOND,
(SELECT TIMESTAMP(start_time)
FROM shift
WHERE TIME(NOW()) >= start_time AND
TIME(NOW()) <= end_time) AS start_time, NOW())
所以我所有的问题是,是否可以将DateTime
中的TIMESTAMPDIFF
表达式替换为Sub Selects?我该如何实现?
更新:TIMESTAMPDIFF中的子选择返回标量值,即时间戳,即 2018-10-30 06:00:00 。
答案 0 :(得分:1)
可以,但是子查询必须是 scalar 子查询。标量子查询返回一列,最多返回一行。您可以使用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
不属于