日期范围过滤器中的 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 语句的主要内容,如果未能解决你的问题,请参考以下文章

drupal-6视图参数中的日期范围?

根据日期范围过滤列

数据表日期范围过滤器,但是,我想删除分页,并可能添加或删除一些其他功能

使用两个未绑定的文本框按日期范围过滤表单记录

在 GridMvc 中有日期范围过滤器

drupal 8 查看日期范围过滤器-“介于”运算符不包括结束日期