【问题标题】:sec_to_time() breaking query with nested selectsec_to_time() 使用嵌套选择中断查询
【发布时间】:2013-08-30 16:57:11
【问题描述】:

如果我做一个

SELECT SEC_TO_TIME(100);

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

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

总时间存储为整数值,查询 返回语法错误,能否在 sec_to_time 函数中执行嵌套的 select 语句?

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

【问题讨论】:

  • 尝试为返回的列提供别名? (尝试在语句的最后添加as stuff 并将sum(totaltime) 更改为sum(totaltime) as tt
  • 也许总时间是 varchar。发布更多代码或架构。
  • 是的,可能需要将总时间转换为数字类型。
  • @BradSeman 它已经是数据库中的一个整数

标签: mysql


【解决方案1】:

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

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                                                               |
+------------------------------------------------------------------------+

【讨论】:

  • 谢谢 Paul,我在发布后不久就想通了,但我一直没有发布答案,所以我接受了你的 :)
【解决方案2】:

试试这个:

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

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

【讨论】:

  • 不错的尝试,但是 SQL 错误 (1064):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 'SELECT SUM(timetaken) as sum_tt 附近使用的正确语法
  • 总时间是什么列?你能单独运行SELECT SUM(totaltime) as sum_tt FROM tablename WHERE entry_id = 2 并告诉我会发生什么吗? (在您的真实代码中,该选择中没有另一列,对吧?所以没有group by 问题...?)
  • totaltime 是一个整数,sum 查询在 sec_to_time 之外可以正常工作
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2018-05-08
    • 2013-01-19
    • 1970-01-01
    • 2022-11-03
    • 2016-07-31
    • 2013-07-28
    相关资源
    最近更新 更多