我正在尝试编写一个存储过程来选择生日即将到来的员工。
SELECT * FROM Employees WHERE Birthday > @Today AND Birthday < @Today + @NumDays
这将不起作用,因为出生年份是生日的一部分,因此,如果我的生日是“ 09-18-1983”,则该日期不会介于“ 09-18-2008”和“ 09-25-2008”之间。
有没有一种方法可以忽略日期字段的年份部分,而只比较月/日?
该程序将在每个星期一早上运行,以提醒管理人员即将到来的生日,因此它可能跨越新的一年。
感谢Kogus,这是我最终创建的有效解决方案。
SELECT * FROM Employees
WHERE Cast(DATEDIFF(dd, birthdt, getDate()) / 365.25 as int)
- Cast(DATEDIFF(dd, birthdt, futureDate) / 365.25 as int)
<> 0
注意:我已经对其进行了编辑,以修复我认为是重要的错误。当前发布的版本适用于我。
在修改字段和表名称以使其与数据库相对应后,此方法应该起作用。
SELECT
BRTHDATE AS BIRTHDAY
,FLOOR(DATEDIFF(dd,EMP.BRTHDATE,GETDATE()) / 365.25) AS AGE_NOW
,FLOOR(DATEDIFF(dd,EMP.BRTHDATE,GETDATE()+7) / 365.25) AS AGE_ONE_WEEK_FROM_NOW
FROM
"Database name".dbo.EMPLOYEES EMP
WHERE 1 = (FLOOR(DATEDIFF(dd,EMP.BRTHDATE,GETDATE()+7) / 365.25))
-
(FLOOR(DATEDIFF(dd,EMP.BRTHDATE,GETDATE()) / 365.25))
基本上,它获得从生日到现在的天数,并将其除以365(以避免舍入直接转换为年份时出现的问题)。
然后将其从生日到现在的一周的天数,然后将其除以365,从现在开始一周。
如果他们的生日在一周之内,则这两个值之间的差将为1。因此,它将返回所有这些记录。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。