【问题标题】:Adding time in SQL Server 2008在 SQL Server 2008 中添加时间
【发布时间】:2013-01-04 04:51:28
【问题描述】:

我想在 SQL Server 中添加时间。我在数据库中有一个名为checktime 的列,它是datetime 数据类型。我想从checktime 列中添加时间。我该怎么做??

我正在计算员工在指定日期内工作的总小时数。

我的数据库看起来像这样.. 我想将时间从 checktime 添加到 checktype = 1checktype = 2 然后减去结果。 (checktype = 1 表示签入,checktype = 2 表示签出)

我该怎么做??

  Id        EmpId              CheckTime                                CheckType
---------------------------------------------------------------------------------
  3           5             2013-01-03 09:00:15.000                         1 
  4           5             2013-01-03 11:00:00.000                         2 
  5           5             2013-01-03 11:30:00.000                         1 
  6           5             2013-01-03 13:00:00.000                         2 
  7           5             2013-01-03 13:30:00.000                         1 
  8           5             2013-01-03 16:00:00.000                         2 
  9           5             2013-01-03 16:30:00.000                         1 
 10           5             2013-01-03 18:00:00.000                         2 

【问题讨论】:

  • 你能详细说明一下吗?我不明白你想在 checktime 中添加什么。
  • 加时间是什么意思?
  • 我想得到 checktype=1 的检查时间总和... (09:00:15.000 +11:30:00.000 +13:30:00.000+16:30:00.000 )跨度>
  • 如果您正在寻找员工工作的总时间,您应该这样做 (11:00:00.000-09:00:15.000)+(13:00:00.000-11:30:00.000) ).. 以此类推。
  • 我正在寻找那个...但是员工可以多次签入和签出...所以我想总结所有时间间隔...

标签: sql sql-server sql-server-2008 datetime


【解决方案1】:

如果我正确理解你的问题,我会这样做:

SELECT
    EmpId,
    CheckTime,
    CheckType,
    ROW_NUMBER() OVER(PARTITION BY EmpId, DATEADD(dd,DATEDIFF(dd,0,cin.CheckTime),0), CheckType ORDER BY CheckTime) AS Seq
INTO
    #PreparedTable
FROM
    SourceTable


SELECT
    cin.EmpId,
    DATEADD(dd,DATEDIFF(dd,0,cin.CheckTime),0) AS CheckDate,
    (SUM(DATEDIFF(ss,cin.CheckTime,cout.CheckTime)) / 3600.0) AS HoursWorked
FROM
    #PreparedTable cin
JOIN
    #PreparedTable cout
    ON  (cin.EmpId = cout.EmpID)
    AND (DATEDIFF(dd,cin.CheckTime,cout.CheckTime) = 0)
    AND (cin.Seq = cout.Seq)
    AND (cin.CheckType = 1)
    AND (cout.CheckType = 2)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 2011-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多