【问题标题】:Access: User inputs years to query dates in that fiscal year访问:用户输入年份查询该会计年度的日期
【发布时间】:2021-09-02 18:00:57
【问题描述】:

我想输入会计年度 (18/19) 并让查询仅从该范围内的日期中选择。这一年是 3 月 1 日 - 2 月 28 日/29 日。有没有办法输入字符串“18/19”或“21/22”并将这些日期分开并变成参数/标准?我不精通 SQL,但这大致是我的想法。

WHERE ([Combined All].Date_Read)>= #3/1/Left([Water Year:],2)# 
  And ([Combined All].Date_Read)<=#2/1/Right([Water Year:],2)#;

另外,我想创建一个带有日期的字符串并将其输入到 WHERE,但我不知道如何做到这一点

strYearOne = "03/01/" & left([Water Year:],2)
strYearTwo = "03/01/" & right([Water Year:],2)

我对 SWL/Access 语法不是很熟悉,而且我确信我把所有东西都搞混了。 TIA

【问题讨论】:

  • 您的第一个建议应该有效。你为什么不尝试?第二个使用应该避免的“文本”日期。

标签: sql ms-access ms-access-2007


【解决方案1】:

考虑DateSerial 以年、月和日部分构建日期:

WHERE ([Combined All].Date_Read) >= DateSerial([StartYear], 3, 1)
  AND ([Combined All].Date_Read) <  DateSerial([EndYear], 3, 1);

在 MS Access(即 .exe 应用程序)中运行上述程序时,将提示用户输入这两个参数。但是,如果将 MS Access 作为后端(即 ODBC 连接)运行,则查询将失败,您需要提供这些参数,例如绑定到 Python ODBC、PHP ODBC 和 VBA ADO 中使用的 qmark 占位符:

WHERE ([Combined All].Date_Read) >= DateSerial(?, 3, 1)
  AND ([Combined All].Date_Read) <  DateSerial(?, 3, 1);

【讨论】:

  • 感谢 DateSerial 的提示,它运行良好。我也更新了它,所以我只需要输入 1 个输入:WHERE ([Combined All].Date_Read) &gt;= DateSerial(left([FiscalYear],2), 3, 1) AND ([Combined All].Date_Read) &lt; DateSerial(right([FiscalYear],2), 3, 1); 现在我只需输入 18/19,它在一个条目中使用左半边和右半边。
  • 很高兴听到。您也可以输入一个年份并将后面的年份表示为[FiscalYear] + 1!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-15
  • 2011-03-30
  • 2014-08-01
  • 2016-02-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多