2016-12-07 1 views
0

근무 시작 시간 (날짜 시간 형식)을 기준으로 2 개의 데이터베이스 테이블 (MS SQL DB)에서 정보를 검색하려고합니다. 나는 날짜 범위와 그 날의 특정 시간에 기록을 원하지만, 쿼리가 내가 쓴 쿼리는 를 작동하지 않는 것 같다MS SQL 쿼리 on 펀치 시간

select p.fullnm 'Fullname', 
     t.startdtm 'Start Date/Time' 
FROM TIMESHEET t 
     join PERSON p on p.personid = t.employeeid 
WHERE t.startdtm between '2016-01-01' and '2016-12-05' 
AND datepart(hh, startdtm) between 6 and 8 
AND datepart(mi, startdtm) between 00 and 15 

내가 원하는 것은 모든 직원의 목록 자 1 월 1 일에서 5 월 12 일까지 오전 6 시부 터 오전 7시 15 분 사이에 근무했습니다. 어떤 도움이나 제안도 부탁드립니다.

+2

샘플 데이터와 원하는 결과는 원하는 것을 설명하는 데 도움이됩니다. –

+0

날짜와 시간 사이에 당신이 예상했던 것과 완전히 다르지 않다는 사실을주의하십시오. 날짜 만 지정하면 00:00:00이됩니다. 하한은 괜찮지 만 우리는 자연스럽게 상체에 23:59:59를 사용한다고 가정했지만 그렇지 않습니다. 영향은 상한 날짜의 00:00:00부터 모든 레코드를 놓치는 것입니다. 조심해. –

답변

0

이와 비슷한?

WHERE t.startdtm between '2016-01-01' and '2016-12-05' 
    AND cast(t.startdtm as time) between '06:00' and '07:15' 
+0

안녕하세요 존, 그게 내가 시도한 것. 그것은 완벽하게 작동합니다. 고맙습니다. – sansam

+0

@sansam 2016-12-05 00:00:00이 의도 된 상한이므로 5/12/16의 레코드로 어떤 일이 발생하는지 확인하십시오. SQL은 '2016-12-05'는 '2016-12-05 00 : 00 : 00 : 000'을 의미한다고 가정합니다. 쿼리가 5/12에서 startdtm을 사용하여 데이터를 포착하지 못한다는 것을 의미합니다. –

+0

잘못된 답변을 삭제했습니다. 감사합니다. OP가 SQL에서 새로운 것으로 보이고 그것을 알아내는 것이 좋을 것이므로 여전히 상한선 + 날짜 고려 사항을 언급 할 가치가 있다고 느낍니다. –