簡體   English   中英

SQL:如何僅顯示30天的記錄

[英]SQL: How to display records for only 30 days

我試着用

SELECT * from Results
WHERE DATEDIFF(d,Date,getdate())<30

但它似乎有錯誤。

對於提交的每條記錄,僅顯示30天。 我可以知道我的語法是否正確嗎?

非常感謝,斯坦

語法看起來沒問題,但您可能需要'引用' Date

SELECT * from Results WHERE DATEDIFF(d, [Date], getdate()) < 30

您在結果中有一個名為Date的列嗎?

順便說一句,這將無法使用索引,而這將:

SELECT * from Results WHERE [Date] >= DATEADD(d, -30, getdate()) 

首先,您(以及此主題中的大部分回復)都在混淆SQL變體。 您在關於SQL Server的問題中沒有說什么,但是,您正在獲得有關使用SQL Server語法的建議(即GetDate())。

JohnFx的答案為您提供了正確的Jet SQL語法:

SELECT *  
FROM results 
WHERE ([Date] between DateAdd("d", -30, Date()) and Date())

但他也是正確的,在Access / Jet中命名一個字段“Date”真的很糟糕。 可以使用以下方法改進WHERE子句:

WHERE (results.Date between DateAdd("d", -30, Date()) and Date())

但我不能肯定地說 - 我永遠不會說出一個字段“日期”,所以永遠不會遇到這種問題。

但是可能有一個更簡單的版本,因為Jet以一種格式存儲日期,其中整數部分表示日期,小數部分表示時間。 因此,在處理日期(而不是幾周或幾個月或幾個季度)時,您可以直接對它們執行日期數學運算:

WHERE results.Date BETWEEN results.Date-30 AND Date()

這將為您提供與JohnFx的DateDiff()版本完全相同的結果,但不需要為每一行調用DateAdd函數。

關鍵是使用Jet數據庫的正確語法,這意味着DateAdd()的第一個參數是字符串值(“d”),並且您不能使用SQL Server函數(GetDate()),但必須使用Jet的功能用於相同的目的(Date())。 但是,當你不必使用時,避免在SQL中使用Jet / Access函數也是一個好主意,這就是為什么我認為“results.Date-30”版本會比DateAdd()版本更好的原因。

旁白:我真的希望那些發布涉及SQL的答案的人會密切關注提問者用來執行SQL的數據庫引擎。 這個帖子中有很多錯誤的答案正是因為那些海報沒有仔細閱讀這個問題(從關鍵字中可以清楚地看到涉及的是什么數據庫引擎)。

嘗試這個:

SELECT *  
FROM results 
WHERE ([Date] between DateAdd("d", -30, Date()) and Date())

另一個單挑。 在Access中命名字段“Date”通常是個壞主意。 這是一個保留字,你必須在所有查詢中使用括號[]。

如果您使用的是Microsoft Access數據庫,則獲取當前日期的函數是Date()而不是getdate() (適用於SQL Server)。

您的查詢看起來很健 您正在運行的錯誤是什么?

您沒有將SQL Server指定為數據庫。 在Access中,DateAdd的語法是:DateAdd(“d”,1,“31-Jan-95”)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM