我是一家正在教我如何在SQL服务器中首次编程查询的公司的实习生,我对我在执行其中一张票时遇到的公式有疑问。这是一个存储过程,每周运行一次,以生日快乐的电子邮件发送给下周有生日的人。这看起来很简单,但有些东西让我感到困扰的是他们使用的公式的复杂性让我实习的人真的从这里得到了。
Cast(DATEDIFF(dd, dateOfBirth, CURRENT_TIMESTAMP+1) / 365.25 as int)
- Cast(DATEDIFF(dd, dateOfBirth, CURRENT_TIMESTAMP+7) / 365.25 as int)
<> 0
我明白这是在考虑员工目前的年龄,看他们是否在一周内的年龄相同,如果不是他们有生日,但我认为这看起来很乱,所以我想看看我能做什么从头开始。我想出的就是这个。
DATEPART(DY, dateOfBirth) - DATEPART(DY, CURRENT_TIMESTAMP) > 0
AND DATEPART(DY, dateOfBirth) - DATEPART(DY, CURRENT_TIMESTAMP) < 8
对我而言,这看起来更简洁,但是当我运行查询时,它返回的员工数量超过之前的代码。我的问题是为什么它会以不同的结果回来,这是一个找到生日的可行方法吗?
答案 0 :(得分:0)
看起来原始代码今天没有考虑到,它总是从明天开始,这可能是您的新代码找到更多人的原因之一。
但是,请考虑您的逻辑:
DATEPART(DY,dateOfBirth) - DATEPART(DY, CURRENT_TIMESTAMP) > 0
根据这一点,如果我的出生日期是1月1日(datepart(dy, dateOfBirth) = 1
)并且您在12月31日(datepart(dy, current_timestamp) = 365
)运行了这个,那么您将无法通过上述约束。
使用原始代码可以提供静态整数,无论一年中的哪一天。