我正在尝试从显示未来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天和该月的其余时间。
答案 0 :(得分:1)
这是当前月份的查询:
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;
您应该分别查看三个月中从最早的记录到最新的记录。
答案 1 :(得分:0)
将其作为答案而不是评论-将根据“本月”的每一天返回给定月份的所有行
SELECT *
FROM [dbo].[vPolicy_Renewal_90DayLookUp] AS PRD
WHERE
DATEPART(MONTH,PRD.ExpDate) = DATEPART(MONTH,GetDate())
AND DATEPART(YEAR, PRD.ExpDate) = DATEPART(YEAR, GETDATE())
添加: 根据{{3}}
,您可能需要在ExpDate字段上建立索引答案 2 :(得分:0)
@Tim Biegeleisen我发现了一些答案。我尝试使用SQL month()函数,但是由于数据库中较早的转换,它将永远不会执行。这就解释了为什么@JonTout答案将无法正常工作。通过这种方式,我能够实现自己想要的。
DECLARE @mydate DATE, @myEndDate DATE;
SET @mydate = '12/01/2018';
SET @myEndDate = '12/31/2018';
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, @myEndDate), 0))
order by ExpDate
感谢您@Tim Biegeleisen的帮助。我找到了解决我遇到的问题的另一种方法。这将显示当月的所有记录,并允许我创建一个存储过程,以便用户选择接下来90天要使用的月份。
DECLARE @Diff Int
Set @Diff = 0
SELECT PRD.Client, PRD.ExpDate
FROM [dbo].[vPolicy_Renewal_90DayLookUp] AS PRD
where (Year(ExpDate) = YEAR(getdate()))
AND DATENAME(month, ExpDate) = DATENAME(MONTH, (Dateadd(Month, @Diff,GETDATE())))
order by ExpDate asc
如果没有year(),我可以做同样的事情,但是,它现在可以工作了。我发现这种方式对我来说更有意义。