生日提醒,用SQL怎么写?谢谢大家

xinpplive 2007-09-18 03:51:51
表:staff
staff_id staff_name staff_time
1 刘德华 1981-5-1
2 张飞 1950-11-16
3 王小五 1880-1-1
在存储过程中,
如果得到当日|当月|提前3天提醒|过生日的人员,除1880-1-1外
...全文
1761 35 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
mxh691 2011-08-23
  • 打赏
  • 举报
回复

--解决闰年2月29日转换报错问题
if(datepart(mm,getdate())='2' and datepart(dd,getdate())='29')
begin
select * from client c
where datediff(dd, cast(rtrim(datepart(yy,c.ContactBrithday))+'-'+
rtrim(datepart(mm,getdate()))+'-'+
rtrim(datepart(dd,getdate())-1) as datetime),c.ContactBrithday) between 0 And 5
end
else
begin
select * from client c
where datediff(dd, cast(rtrim(datepart(yy,c.ContactBrithday))+'-'+
rtrim(datepart(mm,getdate()))+'-'+
rtrim(datepart(dd,getdate())) as datetime),c.ContactBrithday) between 0 And 5
or
--解决跨年问题
datediff(dd, cast(rtrim(datepart(yy,c.ContactBrithday)-1)+'-'+
rtrim(datepart(mm,getdate()))+'-'+
rtrim(datepart(dd,getdate())) as datetime),c.ContactBrithday) between 0 And 5
end

--思路是把当前日期的年份用生日年份替换,这样在转换日期2-29这样如果报错的话只要通过判断
当前日期是否刚好2月29日就成了
daocaowe 2011-06-15
  • 打赏
  • 举报
回复
16楼的不行 没考虑跨年的 还有2-29就出错
daocaowe 2011-06-10
  • 打赏
  • 举报
回复
mark
gavin_yao09 2011-05-22
  • 打赏
  • 举报
回复
16楼的帖子我这个严重过,没有问题!

select
*
from
staff
where datediff(dd,getdate(),
cast(rtrim(datepart(yy,getdate()))+ '- '+
rtrim(datepart(mm,staff_time))+ '- '+
rtrim(datepart(dd,staff_time)) as datetime)) between 0 And 3
qwerrewq888 2010-06-17
  • 打赏
  • 举报
回复
正想找呢,太谢谢了
airzen 2007-12-20
  • 打赏
  • 举报
回复
好贴!
顶一下.
honey52570 2007-09-22
  • 打赏
  • 举报
回复
mark
  • 打赏
  • 举报
回复
问题应该解决了,主要就是dateadd的用法。
sp4 2007-09-21
  • 打赏
  • 举报
回复
--上面的有一个问题,就是没有能避免闰年的2-29日的问题
--需要再增加个日期判断就完整了
declare @Date datetime
set @Date = GetDate()

Select * From Staff
Where
DateDiff(Day,DateAdd(Year,DateDiff(year,Staff_Time,@Date),Staff_Time),@Date) between 0 and 3
--增加的日期判断,避免2月29日的生日提醒遗漏或多余提醒
and datepart(day,Staff_Time)=datepart(day,dateadd(year,datediff(year,Staff_Time,@Date),Staff_Time))

Drop table Staff
tomyuansir 2007-09-21
  • 打赏
  • 举报
回复
SoftwKLC(自由的飞鸟(卢成)) ( ) 信誉:100
谢谢指出 错误 谢谢!!
zouzhou1984 2007-09-21
  • 打赏
  • 举报
回复
select * from month(staff_time) = month(dateadd(day,3,getdate())) and day(staff_time) = day(dateadd(day,-3,getdate()))
playyuer 2007-09-21
  • 打赏
  • 举报
回复
where datediff(day,getdate(),dateadd(year,datediff(year,staff_time,getdate()),staff_time))<3
SoftwKLC 2007-09-19
  • 打赏
  • 举报
回复
谢谢SoftwKLC(自由的飞鸟(卢成))
三天之内不带OR,用AND,应该怎么做,能不能
当前时间-生日时间=<3,我对这个不太懂.
----------------------------------------
用<=3 ?应该还要大于0

select
*
from
staff
where datediff(dd,getdate(),
cast(rtrim(datepart(yy,getdate()))+'-'+
rtrim(datepart(mm,staff_time))+'-'+
rtrim(datepart(dd,staff_time)) as datetime)) between 0 And 3
sp4 2007-09-19
  • 打赏
  • 举报
回复
Create table Staff(id int identity(1,1),Staff_Time Datetime)
go
insert into Staff(Staff_Time)
select '20020901' union all
select '20010917' union all
select '19820701' union all
select '19730912' union all
select '19761206' union all
select '19680918'
go

declare @Date datetime
set @Date = GetDate()

Select * From Staff
Where
DateDiff(Day,DateAdd(Year,DateDiff(year,Staff_Time,@Date),Staff_Time),@Date) between 0 and 3

Drop table Staff

------------------------------------------------------
id Staff_Time
----------- ------------------------------------------------------
2 2001-09-17 00:00:00.000
6 1968-09-18 00:00:00.000

(所影响的行数为 2 行)
sp4 2007-09-19
  • 打赏
  • 举报
回复

Create table Staff(id int identity(1,1),Staff_Time Datetime)
go
insert into Staff(Staff_Time)
select '20020901' union all
select '20010917' union all
select '19820701' union all
select '19730912' union all
select '19761206' union all
select '19680918'
go

Select * From Staff
Where
DateDiff(Day,DateAdd(Year,DateDiff(year,Staff_Time,@Date),Staff_Time),@Date) between 0 and 3

Drop table Staff

------------------------------------------------------
id Staff_Time
----------- ------------------------------------------------------
2 2001-09-17 00:00:00.000
6 1968-09-18 00:00:00.000

(所影响的行数为 2 行)
sp4 2007-09-19
  • 打赏
  • 举报
回复
Declare @Date DateTime
Set @Date = GetDate()

Select * From Staff
Where DateDiff(Day,DateAdd(Year,Staff_Time,DateDiff(year,Staff_Time,@Date())),@Date)<=3
SoftwKLC 2007-09-19
  • 打赏
  • 举报
回复
tomyuansir() ( ) 信誉:100
select * from staff where datediff(day,getdate(),staff_time)<=3 and datediff(day,getdate(),staff_time)>=0
----你的不对,如果一个是2005-09-19出生

Declare @d datetime
Set @d='2005-09-19' /*一个人的出生日期*/
Select Datediff(dd,getdate(),@d)
---结果是 -730
它并不在>=0 And <=3范围内,但是他在今天也是生日
tomyuansir 2007-09-19
  • 打赏
  • 举报
回复
select * from staff where datediff(day,getdate(),staff_time)<=3 and datediff(day,getdate(),staff_time)>=0
tomyuansir 2007-09-19
  • 打赏
  • 举报
回复
修改3天内的:


3天内生日的:

select * from staff where datediff(day,getdate(),staff_time)<=3

wuhan_boy 2007-09-19
  • 打赏
  • 举报
回复
顶哈
加载更多回复(15)
说明:(需要最新版本的朋友请在我的主页留言或者直接加我qq:739198750,上线后我会发给你最新版本) 系统必备:SQL2005及以上版本, .Net2.0以上框架 环境配置: 请在你的sql里面导入文件夹database里面的两个数据库文件 请选择setup中的release文件夹下面的setup.exe安装 安装完成后请不要立即运行程序,找到你安装文件夹下面的app.config文件,修改里面的datasource,user id,和password为你自己的主机名,数据库用户名,数据库密码, 然后建立日志文件路径:D:\Log\DateLog\Log 然后再运行程序,只要你的环境正常,一切应该OK了 祝你用的愉快! 程序运行效果 程序主界面: 主要功能:查询并显示选定日期(图中为1月20日)附近几天(图中为17)范围内的日期信息(图中为农历小年), 次要功能:界面皮肤设置刷新(R按钮), 程序最小化到状态栏(M按钮), 直接退出程序(E按钮) 转到皮肤设置编辑(设置向导按钮) 转到日期信息编辑(编辑记录按钮) 显示日期信息详细(双击任意一条查询记录即可:如图中双击“25 2009/12/23 0:00:00 小年”即可查询该记录的详细信息) 皮肤设置界面 主要功能:修改各窗口的样式,颜色,透明度,图片的信息,颜色设置只需单击该颜色对应的文本框就可以在弹出的调色板中进行相应的设置,图片按钮也是类似,单击图片对应的文本框,就会弹出让你选择图片的窗口,这时候你可以在里面进行相应的选择。修改完成后点击应用即可以应用修改结果。(比如我现在对主窗口的样式进行了修改,我只需要在我修改完成后点击应用就可以保存修改信息到数据库,然后我在主窗口Timer中点击R就会发现主窗口的样式发生了变化) 日期信息详细窗口 这个没有什么好说的,看看下面的图片:也就是提供了该日期的详细信息,生命是用来表示日期信息优先级的,主要是让你可以过滤你认为已经不需要了的日期,比如你在2009年10月2日记录了2009年11月3日你要去杭州开会的信息,一旦过了2009年11月3日这个日期也就不需要再次被提醒了,你可以将它的生命设置为-1或者0,这样数据库中保存的相关信息就不会在初始化查询中被查出来 日期管理模块: 主要功能:编辑日期信息(新增,修改,删除,disable等),修中条记录后邮件会有对应的操作,你可以根据修要进行相关操作,当新增日期信息时一定要注意日期信息的时间格式要按照xxxx/xx/xx xx:xx:xx 填,否则会提示错误,肯定不会添加成功的,F和刷新设置按钮都提供重新刷新样式的功能,右下角的图片双击可以更换 PS:由于数据库文件是我直接从本机导出的,安装配置完成后请删除数据库中对你无用的数据,谢谢! 感谢你的使用,如有任何与软件相关的疑问请联系 qq:739198750 msn:yuecnu@hotmail.com e-mail:19890422x@163.com

34,837

社区成员

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

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