我有以下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())
答案 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日,如果您在非闰年中提出要求,那么您很高兴。