提前15天生日报警(10分)

  • 主题发起人 主题发起人 bravercaohao
  • 开始时间 开始时间
B

bravercaohao

Unregistered / Unconfirmed
GUEST, unregistred user!
用户要求对他的客户提前15天报警,怎样用SQL 语句实现.?
(数据库表中有客户出生年月字段)
 
给你一点提示:
用day(), month(), year()函数(sql函数)可以取得一个日期型数据的日、月、年
 
这同进销存中的超期预付款有区别吗?
没有!所有,方法一样。
 
以Northwind为例
select employeeid , birthdate
from employees where
datediff( dayofyear,
dateName(Year,Getdate())+substring(convert(char(6),BirthDate,12),3,4),
Getdate()) =-15
 
yvtong:
谢谢,但你运行一下有问题,dateName(Year,Getdate())少了'-'
你把出生年月转为今年,如果出生年月是1月份的就有问题了,对吗?
并且我要的是在15天内(不是等于)的客户内的客户记录.
我认为会做与做出来正确之间有一段距离,谢谢你给了我这么详细的回答。
 
那么你的语句就是每15天执行一次了
 
我已想出来了:
select * from person where month(birthday)=month(getdate() +15) and
day(birthday)<=day(getdate()+15) 其中person为表名 birthday为字段名

virtualmfc这样回答问题我想不太好吧 softdog希望能详细点,
谢谢yvtong能留下你们的E—mail

 
你的方法只符合生日在前15天的用户
假如生日是1989-01-30号 ,今天是2002-01-20
很明显,你的方案就有问题了
 
如果固定提前n天提醒就很简单,但是如果是提前n天内提醒,好像很复杂。
 
试试这个:
declare @birthday datetime
declare @querydate datetime

set @birthday='1990-01-10'
set @querydate='2002-12-30'

declare @year int
set @year=year(@querydate)

if (convert(datetime, convert(varchar(4),@year)+'-'+convert(varchar(2), month(@birthday))+'-'+convert(varchar(2), day(@birthday)))-@querydate)<=15 or
(convert(datetime, convert(varchar(4),@year+1)+'-'+convert(varchar(2), month(@birthday))+'-'+convert(varchar(2), day(@birthday)))-@querydate)<=15
print 'yes'
else
print 'no'
 
yvtong:
我的思路是出生年月的月份与当前月15天的月份相等,日与当前的日期加15天后的日相等
你肯定没月试就下出了,结论这样不太好,你先在sql上试一上吧,softdog,yvtong我已给
你们加上分了,谢谢下次还需要大家的帮助,能不能留下你们的E—mai或QQ号?谢谢!
 
Select per_name,Per_Dob From person
Where ((month(Per_Dob)=month(getdate())) and (day(Per_Dob)-day(getdate())) between 0 and 15)
or ((month(Per_Dob-15)=month(getdate())) and (day(Per_Dob-15)-day(getdate())) between -15 and 0)
发现此句子有错加分谢谢!
 
后退
顶部