Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL:如何仅显示30天的记录_Sql_Ms Access_Jet - Fatal编程技术网

SQL:如何仅显示30天的记录

SQL:如何仅显示30天的记录,sql,ms-access,jet,Sql,Ms Access,Jet,我试着用 SELECT * from Results WHERE DATEDIFF(d,Date,getdate())<30 但这似乎有错误 对于每个提交的记录,仅显示30天。我可以知道我的语法是否正确吗 非常感谢, 斯坦你的问题看起来很合理。您遇到的错误是什么?语法看起来不错,但您可能需要“引用”日期: 如果您使用的是Microsoft Access数据库,则获取当前日期的函数是date,而不是SQL Server的getdate。请尝试以下操作: SELECT * FROM re

我试着用

SELECT * from Results
WHERE DATEDIFF(d,Date,getdate())<30
但这似乎有错误

对于每个提交的记录,仅显示30天。我可以知道我的语法是否正确吗

非常感谢,
斯坦

你的问题看起来很合理。您遇到的错误是什么?

语法看起来不错,但您可能需要“引用”日期:


如果您使用的是Microsoft Access数据库,则获取当前日期的函数是date,而不是SQL Server的getdate。

请尝试以下操作:

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

另一个抬起头来。在Access中命名字段日期通常不是一个好主意。它是一个保留字,在所有查询中都必须使用括号[]。

您没有指定SQL Server作为数据库。在Access中,DateAdd的语法是:DateAddd,1,31-Jan-95。

首先,您和此线程中的大多数回复都混合了SQL变体。您在问题中没有提到SQL Server,但您得到了使用SQL Server语法(即GetDate)的建议

JohnFx的答案为您提供了正确的Jet-SQL语法:

SELECT *  
FROM results 
WHERE ([Date] between DateAdd("d", -30, Date()) and Date())
但他也正确地认为,在Access/Jet中命名字段日期是非常糟糕的。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函数来实现相同的日期目的。但是,在不需要的情况下,避免在SQL中使用Jet/Access函数也是一个好主意,这就是为什么我相信results.Date-30版本会比DateAdd版本更好



旁白:我真的希望那些发布涉及SQL的答案的人能够密切关注提问者用来执行SQL的数据库引擎。在这个帖子中发现了很多错误的答案,正是因为这些海报没有仔细阅读问题。从关键词中可以清楚地看出,涉及到了什么数据库引擎。

您是遇到了错误,还是没有得到正确的值?您使用的是什么RDM?我使用的是Microsoft Frontpage。Microsoft Frontpage不是RDMS,甚至还有RDBMS。它甚至不是一个好的网络开发系统。我有一个名字叫Date的克隆。非常感谢。你为什么要假设SQL Server?从技术上讲,这不是正确的答案,因为OP最终提到这是一个Access/Jet问题。我相信它最初并没有标记为ms accessConnection failed。未定义的函数“getdate”哦,我有义务添加。不要选择*,请列出所需的特定字段。我的回答的语法只是一个例子,因为我不知道您需要哪些字段。严格地说,在Jet中,这就是语法。Access没有SQL语法-它只有Jet SQL语法?不,您使用的术语“Jet”是指“Microsoft Jet和Microsoft Access引擎”。考虑到“Access”一词包含在严格的定义中,那么以口语形式引用“accesssql”是完全可以接受的,每个人都会知道它的含义。很多人都这么做。但这在讨论和许多人的头脑中都导致了极大的混乱,他们没有区分数据库引擎Jet和开发平台Access。问题是,有Access应用程序经验的人正在浪费时间研究Access标记的问题,例如,如何将PHP网站连接到.mdb文件?Access与此无关。我错过了最初问题上的标记,这会导致我提供不同的语法。也就是说,是什么关键字让你知道这是一种Jet SQL语法?嗨,大卫,谢谢你的洞察力和澄清。我应该提出一个更明确的问题,以避免所有顾问感到困惑。我根据JETSQL而不是SQLServer函数重命名并更正了代码。现在可以了!非常感谢=情人眼里出西施。我发现DATEADOD版本KONDER在眼睛上,因为时间颗粒D=天更明确。如果更好的方法为性能优化,那么考虑一下结果。Dead列是表主键约束中第一个声明的列,以利于集群。没有人提到SQL Server SQL标记只是针对SQL问题的通用标记,不是吗?。
WHERE (results.Date between DateAdd("d", -30, Date()) and Date())
WHERE results.Date BETWEEN results.Date-30 AND Date()