退休提醒和生日提醒

不一样的烟火912 2014-07-22 11:53:02
现在要用SQL做两个提醒,30天内退休员工提醒,这个根据年龄去算,男的55退休,女的50退休
第二个是生日提醒,列出30天内过生日的员工
以上两个Sql语句该怎么写呢?
...全文
212 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 2 楼 DBA_Huangzj 的回复:
然后用datediff函数判断getdate和出生年月的差异
能具体写一下吗?
  • 打赏
  • 举报
回复
引用 1 楼 DBA_Huangzj 的回复:
表结构列出来,一般需要有性别、出生年月日,当然还要有主键
跟这两个提醒相关的字段有,员工性别,出生日期
發糞塗牆 2014-07-22
  • 打赏
  • 举报
回复
然后用datediff函数判断getdate和出生年月的差异
發糞塗牆 2014-07-22
  • 打赏
  • 举报
回复
表结构列出来,一般需要有性别、出生年月日,当然还要有主键
  • 打赏
  • 举报
回复
引用 7 楼 misteryangbin 的回复:
[quote=引用 4 楼 misteryangbin 的回复:] [quote=引用 2 楼 DBA_Huangzj 的回复:] 然后用datediff函数判断getdate和出生年月的差异
能具体写一下吗?[/quote] 请问 convert(varchar,出生日期,23)中的23是什么格式的日期呢?
zhenshz 2014-07-22
  • 打赏
  • 举报
回复

select *
  from  表
where  (datediff(day,getdate(), dateadd(year,CASE WHEN Sex='男' then 55 else 50 end,birthday)) between 0 and 30 
or datediff(day,getdate(),birthday) between 0 and 30 )
  • 打赏
  • 举报
回复
引用 4 楼 misteryangbin 的回复:
[quote=引用 2 楼 DBA_Huangzj 的回复:] 然后用datediff函数判断getdate和出生年月的差异
能具体写一下吗?[/quote] 大侠高明!
唐诗三百首 2014-07-22
  • 打赏
  • 举报
回复

-- 30天内退休员工提醒
select *
 from [表名]
 where datediff(dd,getdate(),dateadd(yy,case 员工性别 
                                        when '男' then 55 
                                        when '女' then 50 end,出生日期)) between 0 and 30

-- 30天内生日提醒
select *
 from [表名]
 where datediff(dd,
                getdate(),
                stuff(convert(varchar,出生日期,23),1,4,rtrim(year(getdate())))
               ) between 0 and 30
發糞塗牆 2014-07-22
  • 打赏
  • 举报
回复
我建议在你的表中加一列作为提醒日期列,然后用这个语句填充数据,然后程序端或者用sql job每天运行一次,检查这列,当前日期等于这列时就触发提醒。生日和退休都类似
SELECT  CASE WHEN 性别 = 0
             THEN CONVERT(VARCHAR(10),DATEADD(DAY, -1,
                          DATEADD(DAY,
                                  1 - DATEPART(DAY,
                                               DATEADD(year, 55, 出生年月日)),
                                  DATEADD(year, 55, 出生年月日))),23)
             ELSE CONVERT(VARCHAR(10),DATEADD(DAY, -1,
                          DATEADD(DAY,
                                  1 - DATEPART(DAY,
                                               DATEADD(year, 55, 出生年月日)),
                                  DATEADD(year, 55, 出生年月日))),23)
        END AS [提醒日期]--假设性别=0为男性
表

34,590

社区成员

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

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