-2

我必须得到花在 SQL 上的总时间有什么想法吗?

这只是我查询的一个简单示例。

`SELECT 
   A.INDX, B.CLIENTNAME, C.PROJECTNAME, D.NAME, 
   CONVERT(CHAR(10), A.CDATE, 101) [DATE],
   CONVERT(TIME(0), A.START_TIME, 108) [START],
   CONVERT(TIME(0), A.END_TIME, 108) [END],
   CONVERT(TIME(0), (A.END_TIME - A.START_TIME ), 108) [HOURS_WORKED]
FROM 
   LOGSHEET A, CLIENTS B, PROJECTS C, DEVELOPERS D
WHERE B.CLIENTNO = 1
  AND C.PROJECTID = 11
  AND D.USERID = 1`

总数应低于工作小时数

删除了我的日志表

`BEGIN CREATE TABLE [dbo].[LOGSHEET](
[INDX] [int] IDENTITY(1,1) NOT NULL,
[CLIENTNO] [int] NULL,
[PROJECTID] [int] NULL,
[USERID] [int] NULL,
[CDATE] [datetime] NULL,
[START_TIME] [datetime] NULL,
[END_TIME] [datetime] NULL) ON [PRIMARY]END GO`

基本上我需要什么

姓名 | 开始时间 | 结束时间 | 工作时间 |

阿杰……| 07:00:00 | 07:15:00 | 00:15:00 |

阿杰.....| 07:00:00 | 07:15:00 | 00:15:00 |

            Total:   |00:30:00|
4

2 回答 2

0
DECLARE @start_time DATETIME, @end_time DATETIME;

SELECT @start_time = '20120621 22:05', @end_time = '20120622 06:47';

SELECT CONVERT(TIME(0), DATEADD(MINUTE, DATEDIFF(MINUTE, @start_time, @end_time), 0));

结果:

08:42:00

因此,如果您在表中有数据,它将非常相似:

SELECT CONVERT(TIME(0), DATEADD(MINUTE, 
  DATEDIFF(MINUTE, A.start_time, A.end_time), 0)) AS [HOURS_WORKED]
FROM ...

您应该远离诸如添加和减去日期/时间类型之类的事情,并使用诸如DATEADD. 此速记适用于 datetime/smalldatetime,但对于新类型可能会出现问题。

于 2012-06-28T12:46:45.493 回答
0

好吧,我找到了解决我的问题的方法,只需添加一个字段“MINUTES”并从 c# 运行查询

if (e.CommandName == "Stop") {
    int row = int.Parse(e.CommandArgument.ToString());
    string indx = GridView1.Rows[row].Cells[1].Text; 
    string s = null;
    s = "UPDATE LOGSHEET ";
    s += "SET MINUTES = (DATEPART(HOUR,TIME_SPENT)*60)+(DATEPART(MINUTE,TIME_SPENT)) ";
    s += "WHERE INDX = @p0 ";


    String[] pr = new String[1];
    pr[0] = indx; 

    cQ.execSql(s, pr);

  }
}

女巫给了我 int 的分钟数,然后运行

protected string GetTotal() {
  string userid = Session["id"].ToString();
  string s = null;


  s = "SELECT SUM(MINUTES) ";
  s += "FROM LOGSHEET ";
  s += "WHERE USERID = @p0 ";

  String[] pr = new String[1];
  pr[0] = userid;

  return cQ.GenQuery(s, pr);
}

其次是

label5.text = GetTotal();

和 KABOOM 完成了所有在几分钟内花费的时间的总和问题已解决

这是一个 C# 程序,但我需要 SQL 查询来解决它

感谢帮助的人!!

于 2012-07-04T06:56:11.493 回答