我在计算数据表的总小时数时遇到问题。我想计算并显示为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"
希望这很清楚
答案 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);