Вместо DATEADD(d, -1, GETDATE())
вы должны использовать выражение, которое возвращает начало предыдущего дня.Для этого вы можете использовать функцию dbo.ufn_StartOfDay()
, но есть более простой способ сделать то же самое:
Select @DayStart = DateAdd( d, DateDiff( d, 0, @inDate ), 0 )
, что означает: увеличить нулевую временную метку на общее количество дней между нулевой временной меткой иданный .
Я бы также предложил использовать это выражение вместо уже существующего вызова функции, поэтому ваш запрос будет:
Select [JobNumber]
From [NCLGS].[dbo].[JobClosedDate]
Where LastInvoiceDate Between DateAdd( d, DateDiff( d, 0, GetDate() ) - 1, 0 )
And DateAdd( d, DateDiff( d, 0, GetDate() ), 0 )
Order By JobNumber Desc
Дополнение
Вам необходимо уточнить, в чем именно проблема.Вот пример запроса, который я создал и который проверяет каждую дату с четверга, 9 июня по субботу, 18 июня. В какую дату вы ожидали получить значения, но не получили или наоборот:
With SampleData As
(
Select 112117 As JobNumber, '2011-06-13 00:00:00.000' As LastInvoiceDate, 'Monday' As DayOfWeek
Union All Select 112089, '2011-06-10 00:00:00.000', 'Friday'
Union All Select 112090, '2011-06-10 00:00:00.000', 'Friday'
Union All Select 112068, '2011-06-10 00:00:00.000', 'Friday'
Union All Select 112082, '2011-06-10 00:00:00.000', 'Friday'
)
, TestDates As
(
Select Cast('20110609' As datetime) As Date
Union All
Select DateAdd(d,1,Date)
From TestDates
Where Date <= '20110617'
)
Select TD.Date, DateName(dw,TD.Date), Count(SD.JobNumber)
From TestDates As TD
Left Join SampleData As SD
On SD.LastInvoiceDate Between DateAdd( d, DateDiff( d, 0, TD.Date ) - 1, 0 )
And DateAdd( d, DateDiff( d, 0, TD.Date ), 0 )
Group By TD.Date
Обновление
При просмотре ваших комментариев и кода, я думаю, проблема в том, что вы используете Between
.Col Between DateA And DateB
переводится как Col >= DateA And Col <= DateB
.То есть он включает обе конечные точки.Вместо этого вам нужно исключить конечную конечную точку:
Select [JobNumber]
From [NCLGS].[dbo].[JobClosedDate]
Where LastInvoiceDate >= DateAdd( d, DateDiff( d, 0, GetDate() ) - 1, 0 )
And LastInvoiceDate < DateAdd( d, DateDiff( d, 0, GetDate() ), 0 )
Order By JobNumber Desc
Это даст вам все номера работ, которые были на предыдущую дату.То есть, если сегодня пятница, 10 июня 2011 года, он выдаст вам все значения LastInvoiceDate от 2011-06-09 midnight
до 2011-06-09 23:59:59
.