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号出生的人,不要忘记了他们的生日哦~

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值