0

如果我做一个

SELECT SEC_TO_TIME(100);

我得到了正确的时间戳,但是如果我执行以下操作,它会中断

SELECT SEC_TO_TIME(SELECT SUM(totaltime) FROM tablename WHERE entry_id = 2)

总时间存储为整数值并且查询返回语法错误,您可以在 sec_to_time 函数中执行嵌套选择语句吗?

这是从 ac# 数据适配器执行的,所以我不能在查询之外操作数据,否则我会得到总和并在其中做一些数学运算。

4

3 回答 3

2

在子查询上调用函数时,您需要一组额外的括号:

SELECT SEC_TO_TIME( (SELECT SUM(totaltime) FROM tablename WHERE entry_id = 2) );

在我的测试数据库中:

mysql> select * from tablename;
+----------+-----------+
| entry_id | totaltime |
+----------+-----------+
|        2 |       100 |
|        2 |       200 |
+----------+-----------+

mysql> SELECT SEC_TO_TIME((SELECT SUM(totaltime) FROM tablename WHERE entry_id = 2));
+------------------------------------------------------------------------+
| SEC_TO_TIME((SELECT SUM(totaltime) FROM tablename WHERE entry_id = 2)) |
+------------------------------------------------------------------------+
| 00:05:00                                                               |
+------------------------------------------------------------------------+
于 2013-08-30T17:15:04.087 回答
0

试试这个:

SELECT SEC_TO_TIME(stt) as stt_stt
FROM  ( SELECT SUM(totaltime) as stt 
        FROM   tablename    
        WHERE  entry_id = 2) as x 

但在 sql fiddle 中,这给了我January, 01 1970 00:12:47+0000,我很确定这不是你想要的......

http://sqlfiddle.com/#!8/819fd/2/0

(对此没有任何保证,但这是我要开始的)

于 2013-08-30T17:04:40.477 回答
0

这是我能想到的唯一其他方法。

SELECT SEC_TO_TIME(SUM(totaltime)) FROM tablename WHERE entry_id = 2
于 2013-08-30T17:16:44.337 回答