如何在 Excel 2007 中创建具有动态日期范围的 SQL 查询?

如何在 Excel 2007 中创建具有动态日期范围的 SQL 查询?

我正在尝试创建一个可以打印给定时间段的报告的电子表格。下面的查询有效,但是当我尝试使用参数?代替日期时,选择包含日期的单元格后出现错误。如果我使用单引号,('?')则字符串到日期/时间的转换会失败,如果不使用单引号(?),则会在附近出现语法错误@p1

最终,我需要一个开始和结束日期,或者一个公式,在开始日期/时间中添加一个月或一个班次,以便筛选出重要信息。查询是在 Microsoft Query 中构建的。

SELECT FloatTable.DateAndTime,
       TagTable.TagName
FROM   master.dbo.FloatTable FloatTable,
       master.dbo.TagTable TagTable
WHERE  FloatTable.TagIndex = TagTable.TagIndex
       AND (( FloatTable.DateAndTime >= {ts '2012-06-01 00:00:00'} )) 

任何帮助都将非常感激。

答案1

您需要以公式而不是文本的形式输入查询,并从您选择的单元格中构建日期,以便创建有效的 SQL 语句。

假设单元格 A1 中有一个日期,请在单元格 B1 中输入以下公式:

="SELECT FloatTable.DateAndTime, TagTable.TagName FROM master.dbo.FloatTable _ 
FloatTable, master.dbo.TagTable TagTable WHERE FloatTable.TagIndex = _
TagTable.TagIndex AND ((FloatTable.DateAndTime>={ts '" & YEAR(A1) & "-" _
& MONTH(A1) & "-" & DAY(A1) & " 00:00:00'}))"

请注意,每行末尾的下划线表示连续。您需要删除它们和回车符才能使公式起作用。整个公式设置在下面的一行中。(在这个网站上很难阅读,但 Excel 喜欢它!)

="SELECT FloatTable.DateAndTime, TagTable.TagName FROM master.dbo.FloatTable FloatTable, master.dbo.TagTable TagTable WHERE FloatTable.TagIndex = TagTable.TagIndex AND ((FloatTable.DateAndTime>={ts '" & YEAR(A1) & "-" & MONTH(A1) & "-" & DAY(A1) & " 00:00:00'}))"

相关内容