为什么访问在日期之间搜索时返回不一致的结果?

本文关键字:不一致 返回 结果 搜索 访问 日期 之间 为什么 | 更新日期: 2023-09-27 18:14:10

所以我有一个我的工作正在运行的小软件来帮助接收和盘点ATM。我制作了一个报告来拉出日期a和b之间的项目条目。我使用MonthCalendar控件,然后使用控件的.SelectionStart.SelectionEnd属性拉出日期范围,因为用户通常会选择一周(星期一至星期五)进行报告。

这是我发送给Access DB的SQL:

InvDB.GetQuery("
  SELECT
    [_Date],Commodity,Gross,Net,Description
  FROM
    Tags
  WHERE
    Format([_Date],'yyyy') = '" + DateTime.Now.Year.ToString() + "' AND
    Format([_Date],'m/d/yyyy') Between #" + monthCalendar1.SelectionStart.ToString("M/dd/yyyy") + "# AND #" + monthCalendar1.SelectionEnd.ToString("M/dd/yyyy") + "# 
    AND NOT Category = 'Finished Goods' 
    ORDER BY [_Date] Asc",
"Tags");

日期以这种格式存储:"9/1/2015 10:31:50 AM"

我从来没有能够得到SQL中的日期函数最初工作,所以我不得不诉诸这种方法,我很遗憾地意识到这是非常低效的…

首先,我使用年份比较的原因是,当我选择一个日期范围时,访问将返回与该日期相关的所有年份。不仅仅是属性返回的那个。(我也知道,如果在不同年份之间进行交易,当然会产生问题)

最后,我在这里问这个问题的原因是,当用户选择日期,并试图获取日期之间的项目…返回的选择是如此的随机…我从来没有见过这种类型的模糊的结果这个SQL返回…我甚至看不出其中的规律。我选择一个星期,它只给出那个星期的5天中的3天,以及上个月的前两周……另一个星期的选择是准确的…另一个,给出一周5天中的2天…

编辑 -根据下面的建议,我现在通过参数推送查询。我还删除了SQL格式()测试后仍然产生相同的随机性。到目前为止,这个简单的查询返回了准确的信息。

SELECT
  [_Date],Commodity,Gross,Net,Description
FROM
  Tags
WHERE
  [_Date] Between ? AND ?
  AND NOT Category = 'Finished Goods' 
ORDER BY 
  [_Date] Asc

为什么访问在日期之间搜索时返回不一致的结果?

尽量不要将[_Date]转换为字符串。在转换日期时,您将无法正确地使用BETWEEN。