sqlserver dateadd&datediff使用

declare @LastMenstruation date,@ExpectedDateOfChildbirth date
declare @DurationWeeks int,@DurationDays int,@ExpectedWeeks int,@ExpectedDays int,@ExpectedTotalWeeks int
declare @Remainder int--余数外加天
declare @AdditionalWeeks int--剩余周

set @ExpectedTotalWeeks=40
set @LastMenstruation='yyyy-MM-dd'
set @ExpectedDateOfChildbirth=dateadd(week,@ExpectedTotalWeeks,@LastMenstruation)
--year | quarter | month | week | day | hour | minute | second | millisecond
set @DurationWeeks=datediff(week,@LastMenstruation,getdate())
set @DurationDays=datediff(day,@LastMenstruation,getdate())
set @ExpectedWeeks=datediff(week,@LastMenstruation,@ExpectedDateOfChildbirth)
set @ExpectedDays=datediff(day,@LastMenstruation,@ExpectedDateOfChildbirth)
set @Remainder=(@ExpectedDays-@DurationDays)%7
set @AdditionalWeeks=case @Remainder when 0 then (@ExpectedWeeks-@DurationWeeks) else (@ExpectedWeeks-@DurationWeeks)-1 end

select
@LastMenstruation [末次月经日期],@ExpectedDateOfChildbirth [预产期]
,cast(@ExpectedWeeks as varchar)+N' 周('+cast(@ExpectedDays as varchar)+N' 天)' [预计]
,cast(@DurationWeeks as nvarchar)+N' 周 + '+cast(@DurationDays%7 as varchar)+N' 天('+cast(@DurationDays as varchar)+N' 天)' [持续]
,cast(@AdditionalWeeks as varchar)+N' 周 + '+cast(@Remainder as varchar)+N' 天('+cast((@ExpectedDays-@DurationDays) as varchar)+N'天)' [剩余]
原文地址:https://www.cnblogs.com/hofmann/p/13895902.html