开发者社区> 问答> 正文

SQL选择即将到来的生日

我正在尝试编写一个存储过程来选择生日即将到来的员工。

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

展开
收起
心有灵_夕 2019-12-28 23:45:50 1072 0
1 条回答
写回答
取消 提交回答
  • 注意:我已经对其进行了编辑,以修复我认为是重要的错误。当前发布的版本适用于我。

    在修改字段和表名称以使其与数据库相对应后,此方法应该起作用。

    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。因此,它将返回所有这些记录。

    2019-12-28 23:46:11
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
SQL Server在电子商务中的应用与实践 立即下载
SQL Sever迁移PG经验 立即下载
PolarDB NL2SQL: 帮助您写出准确、优化的SQL 立即下载