0

使用以下内容作为基础,我将如何计算一个人的几个月年龄

          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
4

3 回答 3

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
于 2013-11-13T10:58:07.977 回答
0

这有点拗口,但我们只使用1就得到了粗略的估计- 如果它是错误的,我们会对其进行调整:DATEDIFF

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 的值。

于 2013-11-13T11:03:43.100 回答
0

您需要始终将 UTC 日期保存在数据库中。将为您省去很多麻烦。

select DATEDIFF(second,@in_DOB,GETUTCDATE())/(30.5*24*60*60.0) --days 30.5 avg of 30 and 31
于 2013-11-13T11:06:13.480 回答