Sql )否则“00:00”结束,108)作为加班 从时代 仅伪代码:您可以从中提取总时间并从中减去8:当总时间-8>0时的情况,然后总时间-8否则0结束加班仅伪代码:您可以提取总时间并从中减去8:当总时间-8>0时的情况,然后总时间-8否则0结束加班伪代码:你可
)否则“00:00”结束,108)作为加班 从时代Sql )否则“00:00”结束,108)作为加班 从时代 仅伪代码:您可以从中提取总时间并从中减去8:当总时间-8>0时的情况,然后总时间-8否则0结束加班仅伪代码:您可以提取总时间并从中减去8:当总时间-8>0时的情况,然后总时间-8否则0结束加班伪代码:你可,sql,tsql,sql-server-2012,Sql,Tsql,Sql Server 2012,)否则“00:00”结束,108)作为加班 从时代 仅伪代码:您可以从中提取总时间并从中减去8:当总时间-8>0时的情况,然后总时间-8否则0结束加班仅伪代码:您可以提取总时间并从中减去8:当总时间-8>0时的情况,然后总时间-8否则0结束加班伪代码:你可以取你的total\u time并从中减去8:当total\u time-8>0,然后total\u time-8,否则0结束加班只是伪代码:你可以取你的total\u time并从中减去8:当total\u time-8>0,然后total\
仅伪代码:您可以从中提取
总时间
并从中减去8:当总时间-8>0时的情况,然后总时间-8否则0结束加班
仅伪代码:您可以提取总时间
并从中减去8:当总时间-8>0时的情况,然后总时间-8否则0结束加班
伪代码:你可以取你的total\u time
并从中减去8:当total\u time-8>0,然后total\u time-8,否则0结束加班
只是伪代码:你可以取你的total\u time
并从中减去8:当total\u time-8>0,然后total\u time-8,否则0结束加班
错误:Msg 8117,级别16,状态1,第26行操作数数据类型char对于减法运算符无效。您的超时和timein不是datetime吗?如果您能解释一下更改,我会更高兴,108是什么?我在最后两行看到它108是结果被强制转换/转换的错误:Msg 8117,16级,状态1,第26行操作数数据类型char对于减法运算符无效。您的超时和timein不是日期时间吗?如果您能解释一下更改,我会更高兴,108是什么?我在最后两行看到它108是结果被强制转换/转换的错误:Msg 8117,16级,状态1,第26行操作数数据类型char对于减法运算符无效。您的超时和timein不是日期时间吗?如果您能解释一下更改,我会更高兴,108是什么?我在最后两行看到它108是结果被强制转换/转换的错误:Msg 8117,16级,状态1,第26行操作数数据类型char对于减法运算符无效。您的超时和timein不是日期时间吗?如果您能解释一下更改,我会更高兴,108是什么?我在最后两行看到108是结果被浇铸/转换的位置
with times as (
SELECT t1.EmplID
, t3.EmplName
, min(t1.RecTime) AS InTime
, max(t2.RecTime) AS [TimeOut]
, t1.RecDate AS [DateVisited]
FROM AtdRecord t1
INNER JOIN
AtdRecord t2
ON t1.EmplID = t2.EmplID
AND t1.RecDate = t2.RecDate
AND t1.RecTime < t2.RecTime
inner join
HrEmployee t3
ON t3.EmplID = t1.EmplID
group by
t1.EmplID
, t3.EmplName
, t1.RecDate
)
SELECT EmplID
,EmplName
,InTime
,[TimeOut]
,[DateVisited]
,CASE
WHEN minpart = 0
THEN CAST(hourpart AS NVARCHAR(200)) + ':00'
WHEN minpart <10
THEN CAST(hourpart AS NVARCHAR(200)) + ':0'+ CAST(minpart AS NVARCHAR(200))
ELSE CAST(hourpart AS NVARCHAR(200)) + ':' + CAST(minpart AS NVARCHAR(200))
END AS 'total time'
FROM (
SELECT EmplID
,EmplName
,InTime
,[TimeOut]
,[DateVisited]
,DATEDIFF(minute, InTime, [TimeOut])/60 AS hourpart
,DATEDIFF(minute, InTime, [TimeOut]) % 60 AS minpart
FROM times
) source
, case when hourpart >= 8 then
case WHEN minpart = 0
THEN CAST((hourpart - 8) AS NVARCHAR(200)) + ':00'
WHEN minpart <10
THEN CAST((hourpart - 8) AS NVARCHAR(200)) + ':0'+ CAST(minpart AS NVARCHAR(200))
ELSE CAST((hourpart - 8) AS NVARCHAR(200)) + ':' + CAST(minpart AS NVARCHAR(200)) end
else '00:00'
end as overTime
with times as (
SELECT t1.EmplID
, t3.EmplName
, min(t1.RecTime) AS InTime
, max(t2.RecTime) AS [TimeOut]
, cast(min(t1.RecTime) as datetime) AS InTimeSub
, cast(max(t2.RecTime) as datetime) AS TimeOutSub
, t1.RecDate AS [DateVisited]
FROM AtdRecord t1
INNER JOIN
AtdRecord t2
ON t1.EmplID = t2.EmplID
AND t1.RecDate = t2.RecDate
AND t1.RecTime < t2.RecTime
inner join
HrEmployee t3
ON t3.EmplID = t1.EmplID
group by
t1.EmplID
, t3.EmplName
, t1.RecDate
)
SELECT EmplID
,EmplName
,InTime
,[TimeOut]
,[DateVisited]
,convert(char(5),cast([TimeOutSub] - InTimeSub as time), 108) totaltime
,convert(char(5), case when TimeOutSub - InTimeSub >= '08:01' then
cast(TimeOutSub - dateadd(hour, 8, InTimeSub) as time) else '00:00' end, 108) as overtime
FROM times
--You can create a separate function to calculate work-hrs and overtime
-- Try this
CREATE FUNCTION GetWorkHours (
@INTime AS DATETIME
,@OutTime AS DATETIME
,@WorkingHrsINMinutes AS INT
)
RETURNS @WorkHours TABLE (
WorkHours VARCHAR(5)
,OTHours VARCHAR(5)
)
AS
BEGIN
INSERT INTO @WorkHours
SELECT CAST((DATEDIFF(Minute, @INTime, @OutTime)) / 60 AS VARCHAR(2)) + ':' + CAST((DATEDIFF(Minute, @INTime, @OutTime)) % 60 AS VARCHAR(2)) AS TotalTime
,CASE
WHEN DATEDIFF(Minute, @INTime, @OutTime) > @WorkingHrsINMinutes
THEN CAST((DATEDIFF(Minute, @INTime, @OutTime) - @WorkingHrsINMinutes) / 60 AS VARCHAR(2)) + ':' + CAST((DATEDIFF(Minute, @INTime, @OutTime) - @WorkingHrsINMinutes) % 60 AS VARCHAR(2))
ELSE '00:00'
END AS OverTime
RETURN
END
--- Sample
SELECT *
FROM Dbo.GetWorkHours('2014-01-22 10:00:09.270', '2014-01-22 18:35:09.270', '480')
SELECT *
FROM Dbo.GetWorkHours('2014-01-22 10:00:09.270', '2014-01-22 17:35:09.270', '480')