sql - 天数时间总和

标签 sql sql-server vb.net t-sql

这些是我的表格字段

 AtdId  MCId    AtdDate              CheckIn                CheckOut            Status
    675 7   2013-10-03  2013-10-03 16:42:49.307         2013-10-03 16:43:10.317 0#0#56
    676 7   2013-10-03  2013-10-03 16:46:28.730         2013-10-03 16:46:35.780 0#0#7
    677 7   2013-10-03  2013-10-03 16:49:33.190     2013-10-03 16:49:35.140 0#0#2
    678 7   2013-10-03  2013-10-03 16:49:36.913         2013-10-03 16:49:38.377 0#0#2
    679 7   2013-10-03  2013-10-03 16:49:39.397     2013-10-03 16:49:40.023 0#0#1
    680 7   2013-10-03  2013-10-03 16:49:41.043         2013-10-03 16:49:41.703 0#0#0
    681 7   2013-10-03  2013-10-03 16:49:43.307         2013-10-03 16:49:45.063 0#0#2
    682 7   2013-10-03  2013-10-03 16:50:33.657         2013-10-03 16:50:45.783 0#0#12
    683 7   2013-10-03  2013-10-03 16:51:35.007         2013-10-03 16:52:42.877 0#1#7

状态字段 0#0#0 为小时#分钟#秒。如何将每天的小时、分钟和秒相加来显示日期的总持续时间? 数据库中的状态为 varchar,我正在使用 MSSQL。

最佳答案

我仍然认为从 CheckIn 和 CheckOut 列中进行 SUM 是一个更好的主意。但是,如果您想要从 Status 中求 SUM,这里是一种方法。

WITH cte AS (
  SELECT 
    *,
    PARSENAME(REPLACE(Status,'#','.'), 1) AS StatusSecond,
    PARSENAME(REPLACE(Status,'#','.'),2) AS StatusMinute,
    PARSENAME(REPLACE(Status,'#','.'),3) AS StatusHour
  FROM tbl
)
SELECT [AtdDate], SUM(StatusHour*60*60 +  StatusMinute * 60 + StatusSecond) AS TotalTimeInSecond
FROM cte  
GROUP BY [AtdDate]
ORDER BY [AtdDate]

sql fiddle demo

编辑:

要按当前日期/周/月进行过滤,您可以在上面的查询中添加以下条件。

WHERE DATEDIFF(week,AtdDate,GETDATE()) = 0 
-- You can change week to Day or Month 

更多优惠请见DATEDIFF

关于sql - 天数时间总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19161026/

相关文章:

php - 如何重新计算与另一个表相关的字段(Yii2 MySQL)

sql - 表值参数默认值或通过内联

sql - 如何为主键列创建自定义自动生成的 ID 号?

vb.net:在 XML 注释中使用 <see> 标签

sql - 有效地使用另一个表的聚合更新表

mysql - SQL 查询没有值

sql-server - 案例中两个SQL Server之间的异步通信采用什么机制?

vb.net - 这个 linq 查询有什么问题?

mysql - 未为类型 '&' 和 'String' 定义运算符 'Control'

SQL Server 将查询输出为 UTF8 而不是 UTF16