MS SQL Server:计算年龄,精确到小时和分钟

时间:2014-04-23 11:21:40

标签: sql sql-server datetime datediff

我需要一个SQL函数来计算年龄。它必须准确并涵盖所有角落情况 它适用于婴儿的医院病房,因此30分钟的年龄是常见的情况。

我查看了其他答案但找不到处理所有案例的答案。

例如:

  • 婴儿出生于2014-04-29 12:59:00。
  • 现在是2014-04-29 13:10:23.000,

年龄应为0岁,0个月,0天,0小时, 11分钟

如果有人能够提供该功能的最终和最终版本,那就太棒了。

(我担心使用DateDiff的简单解决方案不够好。如更受欢迎的question 中所述:" Datediff功能无法处理年份边界很好......"

3 个答案:

答案 0 :(得分:2)

此查询将以分钟为单位为您提供日期差异

select datediff(mi, '2014-04-23 05:23:59.660',getdate())

然后,您只需为minutes/60hours计算minutes mod 60的{​​{1}}

minutes

答案 1 :(得分:1)

我们可以使用DATEDIFF来获取年,月和日差异,然后使用简单除法来表示秒,分和小时差异。

我已使用@CurrentDate重新创建原始请求,但@CurrentDate = GETDATE()将在执行时返回年龄。

DECLARE @BirthDate DATETIME
DECLARE @CurrentDate DATETIME
SET @BirthDate = '2014-04-29 12:59:00.000'
SET @CurrentDate = '2014-04-29 13:10:23.000'

DECLARE @DiffInYears INT
DECLARE @DiffInMonths INT
DECLARE @DiffInDays INT
DECLARE @DiffInHours INT
DECLARE @DiffInMinutes INT
DECLARE @DiffInSeconds INT
DECLARE @TotalSeconds BIGINT


-- Determine Year, Month, and Day differences
SET @DiffInYears = DATEDIFF(year, @BirthDate, @CurrentDate)
IF @DiffInYears > 0
    SET @BirthDate = DATEADD(year, @DiffInYears, @BirthDate)
IF @BirthDate > @CurrentDate
BEGIN
    -- Adjust for pushing @BirthDate into future
    SET @DiffInYears = @DiffInYears - 1
    SET @BirthDate = DATEADD(year, -1, @BirthDate)
END

SET @DiffInMonths = DATEDIFF(month, @BirthDate, @CurrentDate)
IF @DiffInMonths > 0
    SET @BirthDate = DATEADD(month, @DiffInMonths, @BirthDate)
IF @BirthDate > @CurrentDate
BEGIN
    -- Adjust for pushing @BirthDate into future
    SET @DiffInMonths = @DiffInMonths - 1
    SET @BirthDate = DATEADD(month, -1, @BirthDate)
END

SET @DiffInDays = DATEDIFF(day, @BirthDate, @CurrentDate)
IF @DiffInDays > 0
    SET @BirthDate = DATEADD(day, @DiffInDays, @BirthDate)
IF @BirthDate > @CurrentDate
BEGIN
    -- Adjust for pushing @BirthDate into future
    SET @DiffInDays = @DiffInDays - 1
    SET @BirthDate = DATEADD(day, -1, @BirthDate)
END

-- Get number of seconds difference for Hour, Minute, Second differences
SET @TotalSeconds = DATEDIFF(second, @BirthDate, @CurrentDate)

-- Determine Seconds, Minutes, Hours differences
SET @DiffInSeconds = @TotalSeconds % 60
SET @TotalSeconds = @TotalSeconds / 60

SET @DiffInMinutes = @TotalSeconds % 60
SET @TotalSeconds = @TotalSeconds / 60

SET @DiffInHours = @TotalSeconds


-- Display results
 SELECT @DiffInYears AS YearsDiff,
        @DiffInMonths AS MonthsDiff,
        @DiffInDays AS DaysDiff,
        @DiffInHours AS HoursDiff,
        @DiffInMinutes AS MinutesDiff,
        @DiffInSeconds AS SecondsDiff

答案 2 :(得分:0)

它会在几秒钟内select datediff(s, '2014-04-23 05:23:59.660',getdate())

为您提供date diff