c#中数据表中所有持续时间的总和

时间:2014-02-17 20:32:02

标签: c# mysql

我在计算数据表的总小时数时遇到问题。我想计算并显示为HHHHH:MM:SS到文本框?是否需要将查询字符串更改为其他数据类型?它在数据库中存储了几毫秒。

填充数据表的MYSQL查询

SELECT Switch_Name, Extn, COUNT(*) as Total_Calls, SEC_TO_TIME(SUM(cldp_talk_time/1000)) as Talk_Time, SUM(cost/100000) as 'Total_Cost

这就是数据表中的内容。

Talk_Time
16:46:11
03:56:20
03:26:55
00:50:09
00:46:48
00:17:18
00:09:55
00:00:19

我目前正在使用下面的命令计算问题显示为DD HH:MM:SS的时间总和,然后达到99 23:59:59的限制,然后崩溃。我尝试过转换到datetime但没有任何不同。

  minsclltxt.Text = callrecdt.Compute("Sum(Talk_Time)", "").ToString();

minsclltxt目前显示为

"6.13:25:33" 

希望看到

"157:25:33"

希望这很清楚

3 个答案:

答案 0 :(得分:0)

转换为TimeSpan,计算Ticks的总和,然后根据该结果创建一个新的TimeSpan。

答案 1 :(得分:0)

您需要将结果ToString实例保持足够长的时间以保留自己的字符串格式,而不是直接调用Calculate调用的结果TimeSpan。标准字符串格式都不包括“总小时数”,但TimeSpan将其定义为属性。这是一个简单的控制台应用程序演示:

static void Main(string[] args)
{
    var dt = new DataTable();
    dt.Columns.Add("Talk_Time", typeof(TimeSpan));

    for (var i = 0; i < 101; i++)
    {
        var dr = dt.NewRow();
        dr["Talk_Time"] = TimeSpan.FromDays(1);
        dt.Rows.Add(dr);
    }

    var sum = (TimeSpan)dt.Compute("Sum(Talk_Time)", "");
    Console.WriteLine("{0}:{1}:{2}", sum.TotalHours, sum.Minutes, sum.Seconds);
    Console.ReadKey();
}

这会将2424:0:0打印到控制台。

答案 2 :(得分:0)

无法得到HHHH:MM:SS,但这样做。

由于

                var sum = (TimeSpan)callrecdt.Compute("Sum(Talk_Time)", "");
                minsclltxt.Text = String.Format("{0} Days {1} Hours {2} Minutes {3} Seconds", sum.Days,sum.Hours,sum.Minutes,sum.Seconds);