저는 SQL 전문가가 아니며이를 파악하는 데 도움이 필요합니다. 필자는 사용자가 펀치 한 시간을 추적하고 작업 시간 및 기타 계산 시간을 계산할 필요가있는 SQL Server 2012 데이터베이스가있는 급여 응용 프로그램을 작성하고 있습니다. 근무 시간은 오전 9시 30 분에서 오후 5시 30 분 사이의 시간으로 계산됩니다. 여기에 논리입니다 :SQL Server는 Select 문에 조건부 변수를 할당합니다.
- 이전의 오전 9시 반에서 사용자 펀치는, 작업 시작 시간은 오전 9시 반
- 에 를 설정하면 나중에보다 오전 9:30 작업 시작의 사용자 펀치하면 실제 시간은 입니다.
- 사용자가 오후 5시 30 분 이후에 펀치 아웃하는 경우. 작업 종료 시간은 오후 5시 30 분으로 으로 설정됩니다.
- 사용자가 오후 5시 30 분 전에 펀치 아웃하는 경우 작업 종료 시간은 으로 실제 펀치 아웃 시간으로 설정됩니다.
여기서 부분적인 SQL은 시도했지만 어디에도 없습니다. 어떤 도움을 주시면 감사하겠습니다 :
declare @start time;
declare @end time;
select @start=cast('09:30:00.0000000' as time)
select @end=cast('17:30:00.0000000' as time)
SELECT Datename(dw,LastUpdate) as WeekDay
,FORMAT(PunchIn,'MM/dd/yyyy hh:mm tt') as PunchIn
,FORMAT(PunchOut,'MM/dd/yyyy hh:mm tt') as PunchOut
,case
--employee punched in before 9:30 so take 9:30 as start time
when datediff(mi,@start,cast(PunchIn as time))<0 then (select @start='09:30:00.0000000') end
from TimeTracker
이 전체 SQL 아니지만 당신은 내가 사용하려고 논리를 볼 수 있습니다. 내 질문은 펀치 인 또는 펀치 아웃 시간과 같은 다른 열의 값을 기준으로 시작 시간 또는 종료 시간을 설정하는 방법입니다. SQL은 select 절에서 when 절의 일부로 오류를 제공합니다. 다른 언어에서는 쉽게이 작업을 수행 할 수 있지만 SQL에서는 어려움을 겪고 있습니다.
'(@ start = '09 : 30 : 00.0000000') '을 (를) 선택하고 '09 : 30 : 00.0000000'또는 '더 나은'then @ start '로 변경해보십시오 – Beth