当前位置: 首页  >  Oracle  >  sql: 生日三个月内有效

sql: 生日三个月内有效 TOP

 
  1. DECLARE @birthday  datetime,@stat datetime,@end datetime,@statbirthday datetime,@endbirthday datetime,@thirdbirthday datetime,@firthbirthday datetime, @year int,@month int , @day int,@str varchar(20),@total int,@firthmonth int,@thirmonth int,@now  datetime,@vipno nvarchar(10) --参数   
  2. set @vipno=''8888888''  
  3. set @now=''2014-01-25''  
  4. set @year=Year(@now)   
  5. select  @birthday=birthday from vip1 where vipno=@vipno   
  6. set @month=month(@birthday)   
  7. set @day=day(@birthday)   
  8. set @str=cast(@year as varchar(4))+''-''+cast(@month as varchar(2))+''-''+cast(@day as varchar(2))   
  9. set @birthday=cast(@str as datetime)   
  10. --會員生日有效生首日起至3個月內有效   
  11. set @firthbirthday=DATEADD(mm, DATEDIFF(mm,0,@birthday)-2, 0)--DATEADD(mm, DATEDIFF(mm,0,@birthday), 0)  --当月的第一天   
  12. --set @thirdbirthday=DATEADD(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+3, 0)) --后三个月最后的一天   
  13. SELECT @firthbirthday=DATEADD(MONTH,-2,DATEADD(MONTH,DATEDIFF(MONTH,0,@birthday),0))   
  14. --select cast(@firthbirthday as datetime)   
  15. --set @firthbirthday=DATEADD(MONTH,-2,DATEADD(MONTH,DATEDIFF(MONTH,0,@birthday),0))--DATEADD(Month,0,CONVERT(datetime,CONVERT(char(8),getdate(),120)+''1''))   
  16. --select @firthbirthday   
  17. --DATEADD(mm,0, DATEDIFF(mm,0,@birthday), 0)  --前三个月的第一天   
  18. --set @firthbirthday=convert(datetime, @thirdbirthday)   
  19. --SELECT  三個月有效 塗聚文 涂聚文   
  20. set @firthmonth=month(@now)-2   
  21. set @thirmonth=month(@now)   
  22. set @thirdbirthday=DATEADD(ms,-3,DATEADD(mm, DATEDIFF(mm,0,@now)+1, 0)) --当月最后的一天   
  23. set @thirdbirthday=cast(@thirdbirthday as datetime)   
  24. set @statbirthday=DATEADD(mm, DATEDIFF(mm,0,@birthday)-13, 0)   
  25. set @endbirthday=DATEADD(ms,-3,DATEADD(mm, DATEDIFF(mm,0,@birthday)-1, 0))   
  26. --select @statbirthday,@endbirthday,@firthbirthday,@thirdbirthday,@birthday,@firthmonth,@thirmonth   
  27. --以月份來吧   
  28. SELECT  *  FROM View_birthdayVipdlyList WHERE DATEDIFF(month,NowBirthday,@now)>=0 and  DATEDIFF(month,NowBirthday,@now)<=2  and vipno=@vipno order by VipBirthdayDate desc  
  29.   
  30. --SELECT  *  FROM vip1 WHERE indate>@statbirthday AND  indate<@endbirthday and  month(birthday)>=@firthmonth and month(birthday)<=@thirmonth --and vipno=@vipno   
  31.   
  32. --SELECT @total=ISNULL(SUM(amount),0) FROM View_birthdayVipdlyList WHERE indate>@statbirthday AND  indate<@endbirthday and  month(birthday)>=@firthmonth and month(birthday)<=@thirmonth and vipno=@vipno   
  33. --SELECT @total=@total*.01    
  34.   
  35.   
  36.   
  37. SELECT  count(*) as ''total''  FROM View_birthdayVipdlyList WHERE DATEDIFF(month,NowBirthday,getdate())>=0 and  DATEDIFF(month,NowBirthday,getdate())<=2  and vipno=@vipno   
  38.   
  39.   
  40. if exists (select * from dbo.sysobjects where id = object_id(N''[dbo].[GetVipNowBirthday]''and xtype in (N''FN'', N''IF'', N''TF''))   
  41. drop function [dbo].[GetVipNowBirthday]   
  42. GO   
  43. CREATE   function  GetVipNowBirthday   
  44. (     
  45.    @vipno nvarchar(10), --参数   
  46.    @now datetime   
  47. )   
  48. returns datetime   
  49. AS  
  50. begin  
  51. declare @NowBirthday datetime, @birthday  datetime,@stat datetime,@end datetime,@statbirthday datetime,@endbirthday datetime,@thirdbirthday datetime,@firthbirthday datetime, @year int,@month int , @day int,@str varchar(40),@total decimal  
  52.   
  53. select @birthday=birthday from vip1 where vipno=@vipno and birthday is not null  
  54. set @year=Year(@now)   
  55. if month(@now)=1 and month(@birthday)=12   
  56. begin  
  57.    set @year=@year-1   
  58. end  
  59. if month(@now)=1 and month(@birthday)=11   
  60. begin  
  61.    set @year=@year-1   
  62. end  
  63. if month(@now)=2 and month(@birthday)=12    
  64. begin  
  65.    set @year=@year-1   
  66. end  
  67. set @month=month(@birthday)   
  68. set @day=day(@birthday)   
  69. set @str=cast(@year as varchar(4))+''-''+cast(@month as varchar(2))+''-''+cast(@day as varchar(2))   
  70. set @NowBirthday=convert(datetime,@str) ---cast(@str as datetime)   
  71. return @NowBirthday   
  72. end  
  73. GO   
  74.   
  75. select top 100  vipno,birthday,[dbo].[GetVipNowBirthday](vipno,''2014-03-23''as ''now'' from dbo.vip1 where month(birthday)=12 or month(birthday)=11   
  76.   
  77.   
  78.     

 

Views:1529   Posted at:2013-12-02
收藏 推荐 打印 | 录入:Admin | 阅读:0