【讨论】生日提醒怎么查询最好?

冷箫轻笛 2006-09-13 09:34:44
要求提前30天提醒员工生日,大家讨论一下看都可以怎么写。
我写的很繁琐


SELECT BIRTHDAY FROM Employee
where (datediff(day,getdate(),dateadd(year,datediff(year,birthday,getdate()),birthday)) >= 0
and datediff(day,getdate(),dateadd(year,datediff(year,birthday,getdate()),birthday))<= 30 )
or (datediff(day,getdate(),dateadd(year,datediff(year,birthday,getdate())+1,birthday)) >= 0
and datediff(day,getdate(),dateadd(year,datediff(year,birthday,getdate())+1,birthday)) <= 30 )
...全文
263 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
zsforever 2006-09-13
  • 打赏
  • 举报
回复
好象好要考虑'2002-01-29'这样的特殊情况吧
zsforever 2006-09-13
  • 打赏
  • 举报
回复
Select birthday,* from Employee
Where isdate(case when right(convert(varchar(10),getdate(),120),6)>right(convert(varchar(10),BIRTHDAY,120),6)
then rtrim(year(getdate())) else rtrim(year(getdate())-1) end + right(convert(varchar(10),BIRTHDAY,120),6))=1 and
datediff(day,
case when right(convert(varchar(10),getdate(),120),6)>right(convert(varchar(10),BIRTHDAY,120),6)
then rtrim(year(getdate())) else rtrim(year(getdate())-1) end + right(convert(varchar(10),BIRTHDAY,120),6),
getdate()) <= 30
冷箫轻笛 2006-09-13
  • 打赏
  • 举报
回复
揭帖!
冷箫轻笛 2006-09-13
  • 打赏
  • 举报
回复
哦,先等等
子陌老大的也存在 2月29的情况

老菜鸟说的情况可以不用考虑,但是如果有个人是2月29的生日的话语句就会出错
冷箫轻笛 2006-09-13
  • 打赏
  • 举报
回复
还是子陌老大写的最好!
揭帖了!
冷箫轻笛 2006-09-13
  • 打赏
  • 举报
回复
to:fcuandy(老菜鸟)
有理!!!
我看看这种情况用不用考虑哈。
fcuandy 2006-09-13
  • 打赏
  • 举报
回复
光比较时间差我觉得是有问题的.
某个人 2000-2-29出生,你在 2001-2-1提示他过28天他生日,而实际上他命不好,这年他根本没生日过
WangZWang 2006-09-13
  • 打赏
  • 举报
回复
Select birthday,* from Employee
Where datediff(day,getdate(),dateadd(year,
datediff(year,birthday,getdate()),birthday)) between 0 and 30
冷箫轻笛 2006-09-13
  • 打赏
  • 举报
回复
晕,犯了一个低级错误!呵呵

只有这种算法了吗?

to:WangZWang(先来)
如果该员工的生日是1月份的,比如说1月1号,那么这个日期在头年的12月就应该提示的
csdnweii 2006-09-13
  • 打赏
  • 举报
回复
select
BIRTHDAY
from
Employee
where
datediff(day,getdate(),rtrim(year(getdate()))+'-'+month(BIRTHDAY)+'-'+day(BIRTHDAY)) between 0 and 30
or
datediff(day,getdate(),rtrim(year(getdate())+1)+'-'+month(BIRTHDAY)+'-'+day(BIRTHDAY)) between 0 and 30
csdnweii 2006-09-13
  • 打赏
  • 举报
回复
select
BIRTHDAY
from
Employee
where
datediff(day,getdate(),rtrim(year(getdate()))+'-'+month(BIRTHDAY)+'-'+(BIRTHDAY)) between 0 and 30
or
datediff(day,getdate(),rtrim(year(getdate())+1)+'-'+month(BIRTHDAY)+'-'+(BIRTHDAY)) between 0 and 30
WangZWang 2006-09-13
  • 打赏
  • 举报
回复
Select * from Employee
Where datediff(day,dateadd(year,datediff(year,birthday,getdate()),birthday),
getdate()) between 0 and 30
WangZWang 2006-09-13
  • 打赏
  • 举报
回复
Select * from Employee
Where datediff(day,dateadd(year,datediff(year,birthday,getdate()),birthday),getdate())<=30
子陌红尘 2006-09-13
  • 打赏
  • 举报
回复

select
BIRTHDAY
from
Employee
where
datediff(day,getdate(),rtrim(year(getdate()) )+right(convert(char(10),BIRTHDAY,120),6)) between 0 and 30
or
datediff(day,getdate(),rtrim(year(getdate())+1)+right(convert(char(10),BIRTHDAY,120),6)) between 0 and 30
冷箫轻笛 2006-09-13
  • 打赏
  • 举报
回复
表 Employee 生日字段 BIRTHDAY

34,873

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧