繁体   English   中英

如何以小时和分钟显示工作时间

[英]How to display hours worked with hours and minutes

下面是我的查询和我的C#代码,问题是我需要以hoursmin为单位显示Sum ,但是我收到此错误aggregate函数Sum()Type: String无效用法。 我该如何解决?

以下是我到目前为止尝试过的查询

SELECT ID, name,FromDate,ToDate,CAST(DATEDIFF(Minute,FromDate, ToDate) / 60 AS VARCHAR(5))
+ ' Hrs' + ':' + RIGHT('0' + CAST(DATEDIFF(Minute, FromDate, ToDate) % 60 AS VARCHAR(2)), 2) 
+ ' Min' AS 'Hr' FROM records WHERE convert(date,FromDate,101) 
between convert(date,'" + FromDate + "',101) and 
convert(date,'" + ToDate + "',101) and Name = '" + Name + "'

这是代码

                DataTable Dt = adm.GetTeamActivityByNameDates(FromDate.ToString(), ToDate.ToString(), ddlUser.SelectedValue);
                if (Dt.Rows.Count > 0)
                {

                    int sum = Convert.ToInt32(Dt.Compute("SUM(Hr)", string.Empty));

                    string Noofact = Dt.Rows.Count.ToString();

                    DataTable dtFinal = new DataTable();
                    dtFinal.Columns.Add("Number");
                    dtFinal.Columns.Add("Sum");

                    DataRow dr = dtFinal.NewRow();
                    dr["Number"] = Noofact;
                    dr["Sum"] = sum;                 
                    dtFinal.Rows.Add(dr);
                    dtFinal.AcceptChanges();
                    if (Dt.Rows.Count > 0)
                    {
                        grdACT.DataSource = dtFinal;
                        grdACT.DataBind();
                    }
                    else
                    {
                    }

我试过了

var result = Dt.AsEnumerable().Sum(x => Convert.ToInt32(x["Hr"]));

我也尝试过

dt.Columns.Add("temp", typeof(int), "Convert(Hr, 'System.Int32')");
var str = dt.Compute("Sum(temp)", "Name='a' and Value is not null");

但是什么都没用

与您尝试使用LINQ类似的替代解决方案将很简单:

float sum = 0;
float outVal = 0;
foreach (DataRow dr in dt.Rows)
{
    if (!String.IsNullOrEmpty(dr["Hr"].ToString()))
    {
        if (float.TryParse(dr["Hr"].ToString(), out outVal))
        {
            sum += outVal;
        }
    }
}

然后,用总和做任何您需要的事情。

首先,您不应该将日期和时间存储为DATETIME-这样的计算。 您应该以UTC格式(自1950年以来的秒数)存储此值。 然后仅计算秒数,那么您将得到类似于28383的信息。这是7小时(25200秒),53分钟(3180秒)和3秒。

如果需要在数据库中显示人类可读的日期时间,则应使用将秒数转换为人类可读格式的视图。

将日期和时间存储为DATETIME还具有其他缺点,例如优化不佳(整数计算比DATETIME上的计算要快得多),客户端计算机上日期格式的问题等等。

因此,在像您这样的应用程序中-以秒为单位存储所有日期和时间数据。 计算更加简单快捷。 这不仅是基于我自己的经验,而且我前一段时间已经阅读了很多有关SQL优化的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM