SQL 服务器编程中生日公式的区别

Difference between birthday formulas in SQL server programming

我是一家公司的实习生,这家公司第一次教我如何在 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 对我来说,这看起来更干净、更简单,但是当我 运行 查询时,它返回的员工比以前的代码更多。我的问题是为什么它会返回不同的结果,这是找到生日的可行方法吗?

看来原来的代码没有考虑今天,总是从明天开始,这可能是你的新代码找到更多人的原因之一。

但是,请考虑您的逻辑:

DATEPART(DY,dateOfBirth) - DATEPART(DY, CURRENT_TIMESTAMP) > 0

据此,如果我的出生日期是 1 月 1 日 (datepart(dy, dateOfBirth) = 1),而你 运行 是 12 月 31 日 (datepart(dy, current_timestamp) = 365),你将无法满足上述限制条件。

无论一年中的哪一天,使用原始代码都会为您提供静态整数。