Sql 如何根据条件扣除小时数
使用SQL Server 表1Sql 如何根据条件扣除小时数,sql,sql-server,sql-server-2005,Sql,Sql Server,Sql Server 2005,使用SQL Server 表1 ID, MinTime, TotalTime, BreakTime 001, 04:00:00, 12:00:00, 00:30:00 002, 04:00:00, 03:00:00, 00:30:00 003, 08:00:00, 07:30:00, 03:30:00 004, 04:00:00, 03:59:59, 01:30:00 当totaltime>mintime时,我想扣除totaltime中断时间 Condtion: If Totaltime
ID, MinTime, TotalTime, BreakTime
001, 04:00:00, 12:00:00, 00:30:00
002, 04:00:00, 03:00:00, 00:30:00
003, 08:00:00, 07:30:00, 03:30:00
004, 04:00:00, 03:59:59, 01:30:00
当totaltime>mintime时,我想扣除totaltime中断时间
Condtion:
If Totaltime is greater than mintime then it should deduct the total hours, but it should Maintain the MinTime
例如:
Min time: 05:00:00
Total Time: 06:00:00
BreakTime: 01:30:00
总时间大于最小时间,因此我们可以设置(totaltime Breaktime),它将给出类似“04:30:00”的输出(不正确,因为它还应保持最小时间,因此它应仅从中断时间中扣除1小时)
预期产量
ID, MinTime, TotalTime, BreakTime DeductTime
001, 04:00:00, 12:00:00, 00:30:00 11:30:00 (TotalTime is Greater than mintime)
002, 04:00:00, 04:35:00, 01:00:00 04:00:00 (`Here TotalTime is greather than mintime, so it should deduct the breaktime from the total hours, but it should maintain the mintime also)`
003, 08:00:00, 07:30:00, 03:30:00 07:30:00 (TotalTime is less than mintime)
004, 04:00:00, 03:59:59, 01:30:00 03:59:59 (TotalTime is less than mintime)
如何查询上述条件
需要查询帮助您可以使用语句
SELECT ID
, MinTime
, TotalTime
, BreakTime
, CASE WHEN TotalTime < MinTime THEN TotalTime
WHEN TotalTime - BreakTime < MinTime THEN MinTime
ELSE TotalTime
END AS DeductTime
FROM Table1
选择ID
,分钟
,总时间
,休息时间
,当TotalTime
案例(Transact-SQL)计算条件和条件的列表 返回多个可能值中的一个 结果表达式
如果您的数据类型不是datetime,而是nvarchar,请参阅以下回复:
尝试使用用户定义的函数
create function GetTotalHours (@BreakTime datetime,@Totaltime datetime, @MinTime DateTime) returns datetime
as
begin
declare @newTotalTime datetime;
declare @DiffenceInHours int;
set @DiffenceInHours = datediff(HH,@BreakTime,@Totaltime);
if @Totaltime >@MinTime
begin --If Totaltime is greater than mintime then it should deduct the total hours
set @newTotalTime=dateDiff(HH,@DiffenceInHours,@Totaltime);
end
else
begin--If totaltime is smaller than mintime then it should not deduct the total hours
set @newTotalTime=@Totaltime;
end
return @newTotalTime ;
end
go
然后使用udf从您的表中进行选择,如下所示
select dbo.GetTotalHours('2011-02-03 14:51:48.620',
'2011-02-03 11:51:48.620','2011-02-03 11:51:48.620')
from [YourSourceTable]
你的例子有些前后矛盾。最后三行上的
TotalTime
小于MinTime
,但最后一行显示DeductTime=04:00:00=MinTime
,而其他两行上的DeductTime=TotalTime
。此外,时间值使用的数据类型是什么?显示的时间是数量,而不是时间戳,因此基本上他需要执行条件减法,这是Lieven提出的路线。根据OP最近提出的大量问题,只有OP的日期/时间数据倾向于nvarchar类型。OP总是忘记提到这一事实,也总是被提醒着。@Andrey M:看看OP的历史,他确实在延伸它。看来他自己根本没办法找到答案。谢谢你的回答,我修改了我的问题。你能看看吗please@Liven,谢谢你的回答,我修改了我的问题。你能看看吗please@Gopal:我已经编辑了答案,但如果你自己更加努力地寻找解决方案,从长远来看会为你提供更好的服务(顺便说一句,这是Lieven,而不是liven)。人们希望我花时间回答他们不会花时间问的问题,这总是让我感到惊讶。(乔治)