2012-01-10 2 views
4

Я пытаюсь выбрать для всех элементов, где createDt находится за последние две недели. Я пробовал этот код, но он не работает.Относительный диапазон дат в T-SQL

SELECT * FROM dbo.mytable 
WHERE CreateDt > dateadd(d,-15,CreateDt) 

Может ли кто-нибудь сказать мне правильный способ сделать это?

+1

Можете ли вы уточнить, как это не работает? Кроме того, почему вы используете 15 вместо 14 дней? –

ответ

9
WHERE CreateDt > dateadd(d,-15,CreateDt) 

должен быть

WHERE CreateDt > dateadd(d,-15,getdate()) 

Предположительно.

Все NOT NULL значения CreateDt будут соответствовать вашему текущему состоянию, поскольку вы сравниваете столбец со своим значением минус 15 дней - не за 15 дней до текущей даты и времени.

2

"Где создано> (созданный - 2 недели)"? Я не думаю, что так;)

Попробуйте это:

... where createdate > dateadd (d, -15, getdate()) 
2

Вы проверять, если CreateDt больше, чем за 15 дней до самого себя. Я предполагаю, что вы получаете гораздо больше записей, чем ожидаете.

Я хотел бы сделать что-то вроде этого (для удобства чтения, в первую очередь)

Declare @CheckDate DateTime 
Set @CheckDate = dateadd(d, -15, GetDate()) 

SELECT [Columns] from dbo.mytable WHERE CreateDt > @CheckDate 

Also- помню, чтобы вызвать ваш columns- не использовать «SELECT *» в нормальных условиях.

2

Я считаю, что это то, что вы хотите.

SELECT * FROM dbo.mytable 
WHERE CreateDt > dateadd(wk,-2,getdate()) AND 
     CreateDt < getdate() -- possible bad data 
Смежные вопросы