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

时间:2018-10-30 00:36:57

标签: mysql sql database

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

1 个答案:

答案 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不属于