1

我试图避免硬编码支付截止日期。会计年度为 10 月 1 日至 9 月 30 日。

如果有人在 7 月 1 日至 12 月 31 日之间加入,则付款截止日期为下一个日历年,例如,2013 年 11 月,某人已付款并在 2014 年 9 月 30 日之前获得付款。我需要通过 2013 年和 2014 年付款

如果有人在 1 月 1 日至 6 月 30 日之间加入,则支付截止日期为当前日历年,例如今年 1 月将是 2014 年,他们的支付截止日期为 2014 年 9 月 30 日,我不再需要 2013 年支付通过组。

这就是我所拥有的:如果 getdate 月份在 1 到 6 之间,那么我需要用 9/30/ + 当年的付费来拉人。如果 getdate 月份在 7 到 12 之间,那么我需要选择以当年 9/30 的付费通 + 下一年的 9/30 来拉人。

select id, paid_thru, getdate()as today
from name
where datepart(mm,getdate())between 1 and 6 and datepart (yyyy,paid_thru)+1 = datepart(yyyy,getdate())
or 
datepart(mm,getdate()) between 7 and 12 and datepart (yyyy,paid_thru) = datepart(yyyy,getdate())

这个查询只给了我 2013 年 9 月 30 日,因为月份是 11 月 (11),我需要 09/30/2013 和 09/30/2014 支付截止日期。

谢谢

4

1 回答 1

1

您需要在 or 子句周围加上括号。

select id,
    paid_thru,
    getdate() as today
from name
where
    (
        datepart( mm,getdate() ) between 1 and 6
        and datepart(yyyy,paid_thru) + 1 = datepart(yyyy,getdate())
    )
or
    (
        datepart(mm,getdate()) between 7 and 12
        and datepart (yyyy,paid_thru) = datepart(yyyy,getdate())
    )

由于您没有任何括号,因此即使另一部分没有通过,它也满足了您的第一个 or 子句的一部分。

于 2013-11-12T21:27:05.393 回答