访问 - 检查月份和年份是否在一系列日期之间

时间:2015-01-25 15:03:23

标签: sql ms-access access-vba

我的数据库中有一个表格,其中包含日期(字段“开始”和“结束”):

 Name  |   Start    |    End     |      
John   | 2014-06-30 | 2014-10-31 | 
Tom    | 2014-01-21 | 2014-05-31 |
Steve  | 2012-03-07 | 2014-11-03 |
Hana   | 2013-06-30 | 2014-05-01 |

现在我想查找所有记录,例如2013年6月:

预期结果:

 Name  |   Start    |    End     |      
Steve  | 2012-03-07 | 2014-11-03 |
Hana   | 2013-06-30 | 2014-05-01 |

所以我需要检查月份和年份(例如2013年6月)是否在“开始”和“结束”字段的日期之间。

有什么想法吗?

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

将开始日期和结束日期转换为yyyymm整数并在WHERE子句中使用这些值的问题是查询不会是sargable并且始终需要进行表扫描,即使相应的日期列已编制索引。另一方面,

... WHERE [Start] < DateSerial([searchYear],[searchMonth]+1,1)
        AND [End] >=  DateSerial([searchYear],[searchMonth],1)

生成一个可搜索的查询。

答案 1 :(得分:2)

我通过将年/月变为一个数月的值来解决这个问题。逻辑如下:

where 201306 between year(start) * 100 + month(start) and
                     year(end) * 100 + month(end)