首页 > 解决方案 > 使用参数时访问带有日期 BETWEEN 中断的查询

问题描述

我在访问中有一个 SQL 查询,它将获取计算日期在两个值之间的所有记录。如果我对日期文字进行硬编码,例如:

SELECT *
FROM Table
WHERE DateAdd("d",-60,DateAdd("yyyy",65,[Table].[BirthDate])) Between #3/21/2021# And #3/27/2021#;

但是,我需要对日期之间的日期进行参数化,以便用户可以输入它们,例如:

SELECT *
FROM Table
WHERE DateAdd("d",-60,DateAdd("yyyy",65,[Table].[BirthDate])) Between [StartDate] And [EndDate];

但是,当我运行后一个查询并输入与前一个硬编码的完全相同的日期时,它开始将记录拉出介于范围之间。我试图输入日期3/21/2021和日期文字#3/21/2021#,但都不起作用。后者根本不拉任何东西。

我还有一个表单,其中包含一些使用短日期格式的文本框,让用户可以选择查询的日期。它有同样的问题,即撤回不正确的记录。据我所知,这些记录都没有任何时间成分。

如何获得正确使用用户输入参数的日期?

标签: sqlms-access

解决方案


Access 不知道您的参数是什么数据类型,因此请在查询中指定:

PARAMETERS 
    StartDate DateTime,
    EndDate DateTime;
SELECT 
    *
FROM 
    Table
WHERE 
    DateAdd("d",-60,DateAdd("yyyy",65,[Table].[BirthDate])) Between [StartDate] And [EndDate];

推荐阅读