2012-02-06 2 views
0

В этом типе кода,DATEDIFF GETDATE Добавить

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

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

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

ответ

1

Это не .

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

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

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

+0

Я получаю ошибки – henryaaron

+1

У вас есть дополнительная скобка – henryaaron

0

«В конце диапазона дат» нет в вашем запросе.

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

И (Orders.ShipDate МЕЖДУ DATEADD (День, -1, GetDate()) И DATEADD (День, -7, GetDate()))

+0

Куда я могу положить это? – henryaaron

+0

@ user1090389: выше чище. – NotMe

0

Это должно работать также и устраняет ненужное добавление 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

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

BETWEEN dateadd(second, 0, dateadd(dd,datediff(dd,7,getdate()),0)) AND dateadd(second,-1, dateadd(dd,datediff(dd,0,getdate()),0))