2010-09-16 70 views
0

我正在使用SQL Server 2008 Enterprise。我有一個名爲Foo的表,它有一個名爲MyTime的DateTime類型列。我想查找其MyTime列值已超過3天(從當前時間過去)的所有記錄(行)。如何實現這一點?SQL日期時間類型問題

由於事先 喬治

回答

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

謝謝,問題回答! – George2 2010-09-16 09:12:06

1

DATEDIFF(d,GETDATE(),數值指明MyTime)> 3

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

編輯:這是周圍的其他方法:P

+3

這會給你正確的答案,但它不會正確使用索引。 – 2010-09-16 08:44:12

1

您可以使用DATEADD(datepart,number,date)做計算:

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'分解成另一個語句。即使將它放在查詢的主體中,它也應該只執行一次,因爲規劃人員將足夠聰明以實現它的恆定值。儘管如此,這仍然是最好的答案。 – 2010-09-16 08:45:44

+0

是的,同意......這只是一個保持查詢清潔的習慣...... – veljkoz 2010-09-16 08:48:57

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