sql存储过程中,如何根据指定日期、月数、天数推算预产日期

我这边有一个业务,根据某个指定日期,推算某个患者的预产日期

原理:比如孕产的预产日期的算法(预产日期 = 末次月经日期+ 10月+8天)

那么我们怎么通过存储过程来实现呢?

首先分析条件

需要一个指定日期、月数、天数,返回一个预产日期

那么参数就有这些

   @SearchDate varchar(20),
   @MonthNum int,
   @DayNum int,  
   @ProductDate varchar(20) output

实例如下:

/***********************************************
获取指定月数和天数后的预产日期
条件:末次月经日期、月数、天数
返回:预产日期
备注:根据末次月经日期推算预产日期
Date:2017-09-29
Author:xzl
***********************************************/
ALTER proc [dbo].[sp_GetPreProductDate]
   @SearchDate varchar(20),
   @MonthNum int,
   @DayNum int,  
   @ProductDate varchar(20) output
as 
begin
    --获取当前时间的日期
    --select DATEADD(MONTH,0,GETDATE())
    --根据月数和天数返回一个预产日期
    --1)返回一个指定月数的日期
    --select DATEADD(MONTH,@MonthNum,GETDATE())
    --2)将上面的日期再加上指定天数
    --select DATEADD(MONTH,@MonthNum,GETDATE())+ @DayNum
    --3)根据指定日期、月数、天数推算出预产日期 
    --select (DATEADD(MONTH,@MonthNum,@SearchDate)+ @DayNum)
    --4) 进行转换预产日期(120:代表输出类型:yyyy-MM-dd HH:mm:ss)
    set @ProductDate = Convert(varchar(20),(DATEADD(MONTH,@MonthNum,@SearchDate)+ @DayNum),120)    
end

存储过程调用:

--声明变量--
declare @SearchDate  varchar(20)
declare @MonthNum int
declare @DayNum int
declare @ProductDate varchar(20)
--参数赋值--
set @SearchDate='2017-06-12'
set @MonthNum =10
set @DayNum =8
--执行存储过程(得到预产日期)
exec sp_GetPreProductDate @SearchDate,@MonthNum,@DayNum,@ProductDate output
select @ProductDate as 预产日期

返回结果如图:

posted @ 2017-09-29 11:39  小小邪  阅读(2146)  评论(0编辑  收藏  举报