【问题标题】:Access - Checking if month and year falls between a range of dates访问 - 检查月份和年份是否在日期范围之间
【发布时间】:2015-01-26 00:08:04
【问题描述】:

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

 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 月)是否介于“开始”和“结束”字段的日期之间。

有什么想法吗?

提前感谢您的帮助!

【问题讨论】:

  • StartEnd 存储为日期/时间数据类型。

标签: sql ms-access vba


【解决方案1】:

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

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

产生一个 sargable 查询。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2023-03-23
      • 1970-01-01
      • 2016-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多