2016-10-07 50 views
0

我有一个日期表,它包含每天作为@startDate和@endDate之间的单独行。Azure SQL Server - 基于变量月从表中删除日期

我需要删除与@dayOfMonth相匹配的所有日期,比如第16个例子。

但我不需要保留每一行包含本月16日。我必须考虑另一个变量@everyNMonths。所以,如果@everyNMonths设置为2,和我@startDate是“2016年10月13日”和@EndDate是“2017年3月20日”我会想保留:

2016-10-16 

2016-12-16 

2017-02-16 

不知道怎么可以做到这一点。谢谢你的帮助。

+0

您提供数据的样本数据库表结构? – rbr94

+0

该表只有一列,日期。它在'@startDate'和'@endDate'之间每天都有一个独立的行 – Dough

回答

0

这应该工作:

DECLARE @StartTime DATE = '2015-11-01' 
DECLARE @EndTime DATE = '2016-10-01' 
DECLARE @Interval INT = 1 
DECLARE @dayOfMonth INT = 16 

--CREATE Table #TempTimes 

SELECT StartTime 
FROM 
(
    SELECT StartTime,ROW_NUMBER() OVER (ORDER BY StartTime) As Num 
    FROM 
    (
     SELECT DISTINCT StartTime 
     FROM #TempTimes 
     WHERE DATEPART(DD,StartTime) = @dayOfMonth 
     AND StartTime BETWEEN @StartTime AND @EndTime 
    )t 
)s 
WHERE (Num - 1)%@Interval = 0 
能否