SQL查询查找用户的月度周年纪念日

Mat*_*t B 5 sql t-sql sql-server

我正在尝试编写一个查询,查找与我公司一起庆祝月度周年纪念的用户,以便我们可以向他们发送电子邮件(即,如果今天的日期是3/27,则会找到注册了1/27的人,2/27,3/27,4/27等,无论年份如何).

我的方法是找到其注册日期的"日"部分等于今天日期的"日"部分的用户.

SELECT [User Id],[Sign Up Date] 
  FROM [Monthly Account Update] 
 WHERE DATEPART(DAY,[Sign Up Date]) = DAY(GETDATE())
Run Code Online (Sandbox Code Playgroud)

但是,这当然不适用于以下场景:

  1. 在2月底,我没有机会通过电子邮件向29,30和31个月周年纪念日发送电子邮件,因为这不会发生.理想情况下,当它是2月28日时,我只想把29,30和31日期的人混为一谈.

  2. 对于日期在30日结束的其他每个月,我都不会给第31个日期的人发送电子邮件.理想情况下,我只想把30和31日期的人混在一起.

可以使用SQL查询完成其中任何一项吗?

Gor*_*off 1

您需要一个更复杂的where子句。这是一个暴力方法:

SELECT [User Id],[Sign Up Date]
FROM [Monthly Account Update]
WHERE day([Sign Up Date]) = DAY(GETDATE()) or
      (month(getdate()) in (4, 6, 9, 11) and day(getdate()) = 30 and DAY([Sign Up Date]) = 31) or
      (month(getdate()) in (2) and day(getdate()) = 28 and DAY([Sign Up Date]) in (29, 30, 31))
Run Code Online (Sandbox Code Playgroud)

如果是 2 月,请寻找 28 日。