在Access 2007中选择具有多年的日期的记录

时间:2012-12-17 21:50:28

标签: sql date ms-access-2007

我将Access 2007数据库中的记录保存到一个简单的2列表中,并使用此查询从中生成报告:

sql = "SELECT 
        OrderDate AS `Order Date and Time`, 
        Items AS `Ordered Items` 
    FROM Orders 
    WHERE Format(Orders.OrderDate,'mm/dd/yyyy')  
       >= Format(#" + startDate.Value.Date + "#,'mm/dd/yyyy') 
      AND Format(Orders.OrderDate,'mm/dd/yyyy')
       <= Format(#" + endDate.Value.Date + "#,'mm/dd/yyyy')
    ORDER BY OrderDate"

startDateendDate是VB.2010中的datePicker对象。

startDateendDate在同一年内时,会按预期生成报告。因此,例如,如果我在11月18日和12月27日之间检查订单,我会得到预期的结果。但是,如果我去,从2012年11月1日到2013年1月8日,它没有显示任何记录,即使所有这些月(11月,12月和1月)都有记录。

可能出现什么问题?

1 个答案:

答案 0 :(得分:3)

使用查询中的实际日期,而不是格式化日期。类似的东西:

SELECT OrderDate, Items 
FROM Orders 
WHERE Orders.OrderDate BETWEEN #startDate.Value.Date# AND #endDate.Value.Date# 
ORDER BY OrderDate;

http://www.databasedev.co.uk/sql-between.html

或者,如果您想保留原始查询,请尝试更改日期的格式,以便年份最重要,然后是月份和日期,因此:

SELECT OrderDate AS `Order Date and Time`, Items AS `Ordered Items` 
FROM Orders 
WHERE Format(Orders.OrderDate,'yyyy/mm/dd') >= Format(#" + startDate.Value.Date + "#,'yyyy/mm/dd') 
AND Format(Orders.OrderDate,'yyyy/mm/dd') <= Format(#" + endDate.Value.Date + "#,'yyyy/mm/dd') 
ORDER BY OrderDate;