日期范围过滤器中的 AND 语句
Posted
技术标签:
【中文标题】日期范围过滤器中的 AND 语句【英文标题】:AND statement in Date Range Filter 【发布时间】:2020-06-01 18:33:08 【问题描述】:我有一个表格,带有一个数据表子表格。此子表单包含带有 WageDate 和 TipDate 的行。我有以下代码来过滤记录以显示 WageDate 落在该范围内的记录:
Private Sub btnDateRange_Click()
Dim Filter As String
Filter = "[WageDate] Between #" & Format(Me!TxtStartDate.Value, "yyyy\/mm\/dd") & "# And #" & Format(Me!txtEndDate.Value, "yyyy\/mm\/dd") & "#"
Me!sbfrm_qryDeliveries.Form.Filter = Filter
Me!sbfrm_qryDeliveries.Form.FilterOn = True
End Sub
我的问题是如何更改它,以便它同时过滤 TipDate,以便结果记录将是 WageDate 和 TipDate 都落在所选范围内的记录?记录可能不相等。也就是说,一条记录的 WageDate 可能超出范围,但 TipDate 却超出范围。
一旦我弄清楚了,有没有办法根据该日期选择性地对列进行求和?例如。假设我过滤了一个日期范围并返回了四个记录,其中两个具有符合条件的 WageDates,两个具有符合条件的 TipDates。 WageDate 和 TipDate 都在同一个数据表中。因此,如果我只对 Wage 和 TipAmount 列进行 SUM,我会得到一个总和,其中包括那些不真正属于的列中的数字。 TipAmount 列可能会出现金额,因为 WageDate 落在该范围内,但不在 TipDate 范围内。因此,我需要能够对仅在所选日期范围内的每一列中的行进行求和。我希望这不会太混乱。也许有比我拥有它的方式更好的方法来完全做到这一点,我不知道。哦,对于信息,子表单基于查询,工资和小费都在各自单独的表中。 tblWages, tblTips
【问题讨论】:
可以为字段和做条件表达式:Sum(IIf(criteria here, [column], Null))
。但如果记录集过滤器正确,则不需要。如果您希望两个字段都在给定的日期范围内,则对另一个字段重复 BETWEEN AND。编辑问题以显示示例数据和所需的输出。
跨帖access-programmers.co.uk/forums/threads/…
【参考方案1】:
结果记录将是同时具有 WageDate 和 TipDate 的记录 是否在选定范围内?
Private Sub btnDateRange_Click()
Dim Filter As String
Filter = "([WageDate] Between #" & Format(Me!TxtStartDate.Value, "yyyy\/mm\/dd") & "# And #" & Format(Me!txtEndDate.Value, "yyyy\/mm\/dd") & "#) " & _
"And ([TipDate] Between #" & Format(Me!TxtStartDate.Value, "yyyy\/mm\/dd") & "# And #" & Format(Me!txtEndDate.Value, "yyyy\/mm\/dd") & "#)"
Me!sbfrm_qryDeliveries.Form.Filter = Filter
Me!sbfrm_qryDeliveries.Form.FilterOn = True
End Sub
但是,虽然不清楚,但您可能在这里指的是 OR:
一条记录的 WageDate 可能超出范围,但 提示日期。
Filter = "([WageDate] Between #" & Format(Me!TxtStartDate.Value, "yyyy\/mm\/dd") & "# And #" & Format(Me!txtEndDate.Value, "yyyy\/mm\/dd") & "#) " & _
"Or ([TipDate] Between #" & Format(Me!TxtStartDate.Value, "yyyy\/mm\/dd") & "# And #" & Format(Me!txtEndDate.Value, "yyyy\/mm\/dd") & "#)"
注意:
您只需要格式化您计划显示的数据。
这是一个完全错误的陈述。您必须将日期值格式化为 字符串表达式 以将其与 SQL 命令连接。如果你不这样做,无论本地设置是什么,都会强制你使用隐式强制转换,并且你会失去控制。应用 CDate 或 DateValue 不会改变这一点,并且在这里将是多余的,甚至是错误的来源,因为它们不接受 Null 值。
【讨论】:
以上是关于日期范围过滤器中的 AND 语句的主要内容,如果未能解决你的问题,请参考以下文章