使用以下作为基础,我将如何计算一个人的月龄,我不知道如何改变这一点,所以几个月是cacualated而不是几年
IF cast(datepart(m, GETDATE()) as int) > cast(datepart(m,@in_DOB) as int)
SET @age = cast(datediff(yyyy,@in_DOB,GETDATE()) as int)
else
IF cast(datepart(m,GETDATE()) as int) = cast(datepart(m,@in_DOB) as int)
IF datepart(d,GETDATE()) >= datepart(d,@in_DOB)
SET @age = cast(datediff(yyyy,@in_DOB,GETDATE()) as int)
ELSE
SET @age = cast(datediff(yyyy,@in_DOB,GETDATE()) as int) -1
ELSE
SET @age = cast(datediff(yyyy,@in_DOB,GETDATE()) as int) - 1
RETURN @age
答案 0 :(得分:0)
今天是我的生日:)我已经SELECT DATEDIFF(MONTH, '13 Nov 1963', GetDate())
个月了。哎呀,啤酒已经太多了。
<强>更新强>
DECLARE @birthdate datetime
DECLARE @months INT
SELECT @birthdate = '13 Nov 1963'
SELECT @months = DATEDIFF(MONTH, @birthdate, GETDATE()) - CASE WHEN DAY(@birthdate) > DAY( GETDATE()) THEN 1 ELSE 0 END
SELECT @months
答案 1 :(得分:0)
这有点拗口,但我们只是使用DATEDIFF
1 得到粗略的估计 - 然后我们调整它,如果它错了:
select @age = DATEDIFF(month,@in_DOB,CURRENT_TIMESTAMP) -
CASE WHEN DATEADD(month,DATEDIFF(month,@in_DOB,CURRENT_TIMESTAMP),@in_DOB)
> CURRENT_TIMESTAMP
THEN 1 ELSE 0 END
1 这是粗略的,因为DATEDIFF
告诉你两个日期之间发生的过渡的数量,而不是某些人可能会想到的。这意味着根据此功能,9月30日至10月1日之间的月份差异为1。
因此,最终报告的值比两个日期之间的直观“月差异”高1。
答案 2 :(得分:0)
您需要始终在db中保存UTC日期。会给你省去很多麻烦。
select DATEDIFF(second,@in_DOB,GETUTCDATE())/(30.5*24*60*60.0) --days 30.5 avg of 30 and 31