sql提前N天提醒生日函数


普通过生日的人,每年提前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号出生的人,不要忘记了他们的生日哦~

 

你可能感兴趣的:(SQL,sql,parameters,function,date,脚本,null)