2010-09-16 6 views
0

Я использую SQL Server 2008 Enterprise. У меня есть таблица под названием Foo, и у нее есть столбец типа DateTime с именем MyTime. Я хочу найти все записи (строки), значение столбца MyTime которых прошло более трех дней (истекшее с текущего времени). Как это реализовать?SQL DateTime issue issue

спасибо заранее, Джордж

ответ

3
WHERE myTime < DATEADD(dd,-3,getDate()) 
+0

Спасибо, вопрос ответил! – George2

1

DateDiff (d, GetDate(), MyTime)> 3

select * from table 
    where datediff(d,GetDate(),MyTime) > 3 

Edit: Это было наоборот: P

+3

Этого даст вам правильный ответ, но он не будет использовать индексы должным образом. –

1

Вы можете использовать DATEADD (DatePart, номер, дата), чтобы сделать расчет:

SELECT * FROM Foo WHERE MyTime > DATEADD(dd, -3, MyTime) 
3

Если у вас есть много строк, вы, вероятно, хотите, чтобы удалить за строку-выражение, поэтому сначала выяснить, что дата его, что вы ищете, а затем просто сравните:

DECLARE @DateExpired DATETIME 
SET @DateExpired = GETDATE() - 3 
SELECT * 
FROM Foo 
WHERE MyTime < @DateExpired 
+1

Я не думаю, что вам нужно разбить 'GETDATE() - 3' на другое утверждение. Его следует выполнять только один раз, даже если вы поместите его в тело запроса, потому что планировщик будет достаточно умным, чтобы понять, что он является постоянным значением. Это все же лучший ответ. –

+0

Да, согласился ... это просто привычка держать запросы чистыми ... – veljkoz

1
create table #foo 
(
MyTime dateTime 
) 

Insert Into #foo 
Values ('2010-09-15') 
Insert Into #foo 
Values ('2010-09-14') 
Insert Into #foo 
Values ('2010-09-13') 
Insert Into #foo 
Values ('2010-09-12') 


Select * FRom #foo 
Where DateAdd(day, 3, MyTime) <= '2010-09-16' 

drop table #foo