22,294
社区成员
发帖
与我相关
我的任务
分享select *,datediff(n,CONVERT(smalldatetime,SUBSTRING(A.time2,1,4)+'/'+SUBSTRING(A.time2,5,2)+'/'+SUBSTRING(A.time2,7,2)+' '+SUBSTRING(A.time2,9,2)+':'+SUBSTRING(A.time2,11,2)+':'+SUBSTRING(A.time2,13,2), 120),CONVERT(smalldatetime,SUBSTRING(B.time2,1,4)+'/'+SUBSTRING(B.time2,5,2)+'/'+SUBSTRING(B.time2,7,2)+' '+SUBSTRING(B.time2,9,2)+':'+SUBSTRING(B.time2,11,2)+':'+SUBSTRING(B.time2,13,2), 120))
from test A
cross apply (select top 1 time2 from test where A.name=name and ZT='进' and time2>A.time2 order by time2) as B
where ZT='出'
DECLARE @DT VARCHAR(50)
SET @DT='2020年12月8日17:28:12'
SELECT CONVERT(DATETIME,REPLACE(REPLACE(REPLACE(@DT,'年','-'),'月','-'),'日',' '))
select xx1.*,DATEDIFF(hh,xx1.[TIME],xx2.[TIME]) from
(select *,row_number() over(partition by ZT order by [TIME]) 进出次数 from #TA) xx1,
(select *,row_number() over(partition by ZT order by [TIME]) 进出次数 from #TA) xx2
where xx1.进出次数=xx2.进出次数 and xx1.ZT='出' and xx2.ZT='进'
至于那个AB的判断,感觉可以试试这样,先用DATEPART(HH,[TIME])获取表B里的时间字段值是几点,然后再用between来判断AB对应的时间段,获取对应的进出记录,然后再进行进出时间差的计算