sec_to_time()使用嵌套select打破查询

时间:2013-08-30 16:57:12

标签: mysql

如果我做了

SELECT SEC_TO_TIME(100);

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

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

总时间存储为整数值和查询 返回语法错误,你能在sec_to_time函数中做一个嵌套的select语句吗?

这是从c#数据适配器执行的,因此我无法操纵查询之外的数据,否则我会得到总和并进行一些数学计算。

3 个答案:

答案 0 :(得分: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                                                               |
+------------------------------------------------------------------------+

答案 1 :(得分:0)

试试这个:

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

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

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

(不保证,但这是我要开始的)

答案 2 :(得分:0)

这是我能想到的另一种方式。

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