我的数据库中有一个表格,其中包含日期(字段“开始”和“结束”):
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月)是否在“开始”和“结束”字段的日期之间。
有什么想法吗?
提前感谢您的帮助!
答案 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)