当前位置: 首页 > 面试题库 >

MS SQL Server:以小时和分钟的精度计算年龄

甄飞飙
2023-03-14
问题内容

我需要一个SQL函数来计算年龄。它必须准确并涵盖所有极端情况。
它是婴儿医院的病房,所以30分钟的年龄很常见。

我看了其他答案,但找不到能解决所有情况的答案。

例如:

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

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

如果有人可以提供该功能的最终版本,那就太好了。

(恐怕 使用DateDiff的 简单 解决方案还不够好
。正如一个更受欢迎的问题所述:“ Datediff函数不能很好地处理年份边界…”


问题答案:

我们可以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


 类似资料:
  • 本文向大家介绍php计算年龄精准到年月日,包括了php计算年龄精准到年月日的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php计算年龄精准到年月日的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家学习php程序设计有所帮助。

  • 本文向大家介绍使用 JavaScript 从秒数开始计算小时和分钟,包括了使用 JavaScript 从秒数开始计算小时和分钟的使用技巧和注意事项,需要的朋友参考一下 问题 我们需要编写一个以秒为单位的JavaScript函数,并返回秒数中包含的小时数和分钟数。 输入 输出 示例 以下是代码- 输出结果

  • 我的函数返回时间,例如。如何将时间取整到最接近的一分钟,使变为并使变为。

  • 问题内容: 有没有一种方法可以用Python高精度地测量时间-比一秒更精确?我怀疑是否存在跨平台的方法;我对Unix上的高精度时间很感兴趣,尤其是在Sun SPARC计算机上运行的Solaris。 timeit似乎可以进行高精度的时间测量,但是我想直接访问时间值,而不是测量代码段要花多长时间。 问题答案: 标准功能提供亚秒级的精度,尽管该精度因平台而异。对于Linux和Mac,精度为1微秒或0.0

  • 我试图创建一个基于时间的倒计时钟。它不是基于current_dates。将被拉取的初始时间将来自一个单独的php文件。这将是一个基于浏览器的游戏。当有人点击按钮来启动这个脚本。它将检查是否满足某些要求,如果满足,那么这个脚本将启动。根据对象的级别,它将拉动该进行中级别的初始计时器。希望这有意义。无论如何,我基于我提供的第一个代码的计时器脚本。 此脚本仅占分钟和秒。我对它进行了修改,使其也包括了天和