在日期时间T-SQL之间

时间:2015-10-21 14:00:56

标签: tsql

我有以下Where子句导致我的问题,我正在寻找解决方法。

@startDate是今天的日期,@ endDate是将来可能是7天,14天或20天的结束日期,除非结束月份大于开始月份,否则此工作正常。

问题 - 如果StartDate DAY为20且END Date Day在下个月例子中Start Day是10/21而End Day是11/5而不是where子句取消它自己出来,我不能使用因为我们不包括年。 我试过了一个OR,但这也行不通。

 WHERE    DAY(t.AnniversaryDate) >= DAY(@startDate) 
            AND DAY(t.AnniversaryDate) <= DAY(@endDate)
            AND MONTH(t.AnniversaryDate) >= MONTH(@startDate)
            AND MONTH(t.AnniversaryDate) <= MONTH(@endDate)
            AND YEAR(t.AnniversaryDate) < YEAR(GETDATE())

1 个答案:

答案 0 :(得分:0)

表达式

select DATEADD(year,DATEDIFF(year,'19780517',GETDATE()),'19780517')

将始终返回当年5月17日。通过将'19780517'的两个实例替换为感兴趣的日期,可以使用类似的表达式为任何日期 1 执行相同的技巧。

所以,无论如何&#34;我不能使用一个因为我们不包括年龄&#34;意思是,您应该能够使用上面的表达式解决它。

所以,我认为你想要的是什么:

WHERE    DATEADD(year,
         DATEDIFF(year,t.AnniversaryDate,GETDATE()),
                       t.AnniversaryDate)
         BETWEEN @startDate and @endDate

1 只要您在2月29日映射到2月28日,如果您在非闰年中提出要求,那么您很高兴。