2016-12-07 9 views
0

Я пытаюсь получить информацию из двух таблиц базы данных (MS SQL DB) на основе времени начала смены (формат даты). Я хочу, чтобы записи с диапазоном дат и в определенное время этих дней, но это, кажется, запрос не работает Запрос, который я написал это:MS SQL-запрос в Punch time

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 

То, что я хочу это: список всех сотрудников, работал с 6 утра до 7:15 утра с 1 января по 5 декабря. Любая помощь/предложение будут оценены.

+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

HI John, это именно то, что я пытался. Он работает отлично. Спасибо. – sansam

+0

@sansam вы не заявляете, что 2016-12-05 00:00:00 - это предполагаемая верхняя граница, поэтому на всякий случай проверьте, что происходит с записями на 5/12/16. SQL предполагает, что «2016-12-05» означает «2016-12-05 00: 00: 00: 000», что означает, что ваш запрос не будет захватывать данные с помощью startdtm на 5/12. –

+0

Убрал мой ошибочный ответ, спасибо за указание. По-прежнему чувствую, что стоит упомянуть оценку верхних границ + даты, поскольку OP выглядит как новый на SQL, и было бы хорошо знать. –