我正在使用SQL Server 2008 Enterprise。我有一個名爲Foo的表,它有一個名爲MyTime的DateTime類型列。我想查找其MyTime列值已超過3天(從當前時間過去)的所有記錄(行)。如何實現這一點?SQL日期時間類型問題
由於事先 喬治
我正在使用SQL Server 2008 Enterprise。我有一個名爲Foo的表,它有一個名爲MyTime的DateTime類型列。我想查找其MyTime列值已超過3天(從當前時間過去)的所有記錄(行)。如何實現這一點?SQL日期時間類型問題
由於事先 喬治
WHERE myTime < DATEADD(dd,-3,getDate())
DATEDIFF(d,GETDATE(),數值指明MyTime)> 3
select * from table
where datediff(d,GetDate(),MyTime) > 3
編輯:這是周圍的其他方法:P
這會給你正確的答案,但它不會正確使用索引。 – 2010-09-16 08:44:12
您可以使用DATEADD(datepart,number,date)做計算:
SELECT * FROM Foo WHERE MyTime > DATEADD(dd, -3, MyTime)
如果你有很多行你可能會想刪除每行表達式,所以先找出日期是你尋找,然後只是比較:
DECLARE @DateExpired DATETIME
SET @DateExpired = GETDATE() - 3
SELECT *
FROM Foo
WHERE MyTime < @DateExpired
我不認爲你需要將'GETDATE() - 3'分解成另一個語句。即使將它放在查詢的主體中,它也應該只執行一次,因爲規劃人員將足夠聰明以實現它的恆定值。儘管如此,這仍然是最好的答案。 – 2010-09-16 08:45:44
是的,同意......這只是一個保持查詢清潔的習慣...... – veljkoz 2010-09-16 08:48:57
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
謝謝,問題回答! – George2 2010-09-16 09:12:06