首页 > 解决方案 > SQL中按月获取所有记录

问题描述

我正在尝试从显示未来 90 天记录的视图中提取记录。我需要一种方法来仅按月提取这些记录。我需要它,因为并非所有月份都包含 30 天。这是一个示例,显示了今天和未来 30 天的记录。

select * 
from [dbo].[vPolicy_Renewal_90DayLookUp] AS PRD 
where PRD.ExpDate BETWEEN GETDATE() AND DATEADD(DD, 30, GETDATE()) 
order by PRD.ExpDate 

这将获取今天和接下来 30 天的所有记录,但是,我想要一种方法来捕获当月的所有记录。由于是 11 月,前 5 天和本月剩余时间。

标签: sqlsql-server

解决方案


这是当前月份的查询:

SELECT *
FROM [dbo].[vPolicy_Renewal_90DayLookUp] AS PRD
WHERE
    PRD.ExpDate >= DATEADD(mm, DATEDIFF(mm, 0, @mydate), 0) AND
    PRD.ExpDate < DATEADD(mm, 1, DATEADD(mm, DATEDIFF(mm, 0, @mydate), 0));

第二个月,使用这个WHERE子句:

WHERE
    PRD.ExpDate >= DATEADD(mm, 1, DATEADD(mm, DATEDIFF(mm, 0, @mydate), 0)) AND
    PRD.ExpDate < DATEADD(mm, 2, DATEADD(mm, DATEDIFF(mm, 0, @mydate), 0));

并在第三个月及以后的几个月中继续这种方式。如果您只想对当前和接下来的两个月进行一次查询,请使用以下命令:

SELECT *
FROM [dbo].[vPolicy_Renewal_90DayLookUp] AS PRD
WHERE
    PRD.ExpDate >= DATEADD(mm, DATEDIFF(mm, 0, @mydate), 0) AND
    PRD.ExpDate < DATEADD(mm, 3, DATEADD(mm, DATEDIFF(mm, 0, @mydate), 0))
ORDER BY
    PRD.ExpDate;

您应该在不同的块中看到三个月中的每个月,从最早的记录到最新的记录。


推荐阅读