Sql 天数时间总和
这是我的桌子Sql 天数时间总和,sql,sql-server,vb.net,tsql,Sql,Sql Server,Vb.net,Tsql,这是我的桌子 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
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列求和是一个更好的主意。然而,如果你想从状态中求和,这里有一种方法
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]
编辑:
若要按当日/周/月进行过滤,可以在上述查询中添加以下条件
WHERE DATEDIFF(week,AtdDate,GETDATE()) = 0
-- You can change week to Day or Month
更多细节,请参见您正在使用的RDBMS是什么?“状态”字段的数据类型是什么?您提供的样本数据的预期结果是什么?请说明您迄今为止所做的尝试?仅仅显示输入并告诉“让这个为我工作”并不是这里应该问的问题。询问代码的问题必须证明对正在解决的问题的最低理解。包括尝试的解决方案、它们不起作用的原因以及预期的结果。是否要对状态中的时间求和?这和SUM(DATEDIFF(second,CheckIn,CheckOut)一样吗?状态是在小时、分钟、秒内签入和签出的差异谢谢EricZ,但我只想要当前日期的totalsecond。我怎么做呢?添加“WHERE CAST(AtdDate as date)=CAST(GETDATE()as date)”谢谢Ericzeeee…)埃里克斯:如果我想知道本周和本月的总时间,我该怎么做?