如何在 SQL Server 中检索上个月的记录
要获取特定时间段的记录,常见的做法是使用范围查询具有包容性下限和上限。然而,这种方法带来了两个挑战:损害索引利用率并可能选择意外的数据。
1.索引利用率:
将函数应用于搜索列,包括强制转换等隐式函数,可以强制优化器忽略该列上的索引,从而导致对每个记录进行线性搜索。考虑时间戳,它通常存储为按时间顺序计数。从此类时间戳中提取日期部分需要复杂的计算,从而减慢查询速度。
2.意外数据:
包含的上限范围(例如
正确方法:
要解决这些问题,请使用以下查询结构:
WHERE date_created >= @startOfPreviousMonth AND date_created < @startOfCurrentMonth
要确定上个月和当前月份的开始,请使用以下命令计算:
@startOfPreviousMonth = DATEADD(month, -1, @startOfCurrentMonth) @startOfCurrentMonth = DATEADD(month, DATEDIFF(month, 0, CURRENT_TIMESTAMP), 0)
这种方法确保了索引利用率和准确的数据选择。完整的脚本为:
DECLARE @startOfCurrentMonth DATETIME SET @startOfCurrentMonth = DATEADD(month, DATEDIFF(month, 0, CURRENT_TIMESTAMP), 0) SELECT * FROM Member WHERE date_created >= DATEADD(month, -1, @startOfCurrentMonth) AND date_created < @startOfCurrentMonth
通过对单个值仅执行一次日期操作,优化器可以利用索引,并且查询返回正确的数据。
以上是如何在SQL Server中高效检索上个月的数据?的详细内容。更多信息请关注PHP中文网其他相关文章!