普通过生日的人,每年提前N天提醒,2月29号生日的人,就当他们平年不过生日
USE [AdventureWorks]
GO
/****** 对象: UserDefinedFunction [dbo].[getBirthday] 脚本日期: 03/07/2012 00:28:47 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: kiwiyo
-- Create date: 2012/3/7
-- Description: 输入一个生日,跟你想要查询的任意一个年份的日期,求出你想要
--的那年生日的前几天的日期
--@birth:生日
--@testdate:你想查询的生日的那一年的任意一个正确日期
--@days:你想提前几天知道
-- =============================================
CREATE FUNCTION [dbo].[getBirthday]
(
-- Add the parameters for the function here
@birth datetime ,@testdate datetime ,@days int
)
RETURNS datetime
AS
BEGIN
-- Declare the return variable here
DECLARE @retDate datetime
set @retDate=dateadd(yy,datediff(yy,@birth,@testdate),@birth)
if(day(@retDate) = day(@birth) )
set @retDate = dateadd(dd,-@days,@retDate)
else
set @retDate = null
return @retDate
END
如果说,想要让平年的时候2月29号出生的人也能收到提醒的话,就不要加那个if的判断就可以了。
测试一下这个函数:
select dbo.getBirthday('20000229','20030522',5)
返回值是null,因为2003年是平年,没有2月29号。
换成今年:
select dbo.getBirthday('20000229',getdate(),5)
返回值是2012-02-24 00:00:00.000
在闰年的2012年啊,2月29号出生的人终于过上了生日,如果身边有2月29号出生的人,不要忘记了他们的生日哦~