Datediff GETDATE Добавить - PullRequest
       19

Datediff GETDATE Добавить

0 голосов
/ 07 февраля 2012

В этом типе кода,

AND Orders.ShipDate >= DATEADD(Day, Datediff(Day,0, GetDate() -6), 0)

Предполагалось получить записи с датой 6 дней назад, до сегодняшнего дня. Как я могу заставить его тянуть записи с 7 дней назад до вчерашнего дня?

Я знаю, что изменение -6 на -7 приведет к извлечению записей за 7 дней назад, но какая переменная является концом диапазона дат, поэтому я могу изменить его на -1?

Ответы [ 4 ]

1 голос
/ 07 февраля 2012

Это не промежуток времени.

У вас есть только одно условие: больше, чем.Правая сторона больше, чем 6 дней назад, поэтому ваше состояние соответствует любой дате, которая является более поздней, чем дата шесть дней назад.Другими словами, это не останавливается на Сегодня;это включает в себя и завтра, и на следующей неделе, и в следующем году.

AND ( Orders.ShipDate >= DATEADD(Day, Datediff(Day,0, GetDate() -7), 0)
      AND Orders.ShipDate < DATEADD(Day, Datediff(Day,0, GetDate()), 0) )

Это то, что вы действительно хотите.Это соответствует датам, которые являются более поздними, чем полночь дня 7 дней назад, и датам, которые являются до полуночи сегодня (что является вчерашним временем).

0 голосов
/ 26 апреля 2016

Мне нравится функция МЕЖДУ.Это может быть другой вариант SQL, чем вы используете, но это то, что я использую.

BETWEEN dateadd(second, 0, dateadd(dd,datediff(dd,7,getdate()),0)) AND dateadd(second,-1, dateadd(dd,datediff(dd,0,getdate()),0))  
0 голосов
/ 07 февраля 2012

Это тоже должно работать и исключает ненужное добавление 0 дней:

select *,DATEDIFF(Day, orders.ShipDate, GETDATE()) AS DAYS_SINCE_TODAY
from Orders 
where DATEDIFF(Day, orders.ShipDate, GETDATE()) >= 1 AND --This many days since today
      DATEDIFF(Day, orders.ShipDate, GETDATE()) <= 7     --Going back this many days
0 голосов
/ 07 февраля 2012

"Конец диапазона дат" не указан в вашем запросе.

Измените код на:

AND (Orders.ShipDate BETWEEN DATEADD (Day, -1, GetDate ()) И DATEADD (День, -7, GetDate ()))

...