如何获得 SQL Server 中两个日期之间的确切年份差异?

Sri*_*m M 6 sql-server

我有一个出生日期列,我需要比较当前日期并将差异作为年龄返回。目前我正在使用以下查询:

DECLARE @DateOfBirth date = '2000-07-27'
DECLARE @CurrentDate date = '2015-07-25'

SELECT 
    @Age = DATEDIFF(YEAR, @DateOfBirth, @CurrentDate)
Run Code Online (Sandbox Code Playgroud)

我得到的差异为 15,但所需的结果应该是 14。这是因为它比较了年份并获得了 2015 年和 2000 年之间的差异。所以我使用了以下查询:

select 
    @Age = CAST(datediff(day, @DOB, @CurrentDate) / 365.2425 AS INT)
RESULT : 14
Run Code Online (Sandbox Code Playgroud)

但是当我将出生日期值更改为 '2000-07-25' 时,我仍然得到 14 的值,但它应该是 15,因为日期差正好是 15 年。

我怎样才能从中得到确切的年份差异?

Rob*_*ley 14

以 YYYYMMDD 格式相互减去 1,然后使用整数除法(向下取整)除以 10000。

所以:

(YEAR(@CurrentDate) * 10000 + MONTH(@CurrentDate) * 100 + DAY(@CurrentDate)
- YEAR(@DateOfBirth) * 10000 - MONTH(@DateOfBirth) * 100 - DAY(@DateOfBirth)
) / 10000
Run Code Online (Sandbox Code Playgroud)

20150725-20000727 = 149998,和 149998 / 10000 = 14

您也可以使用CONVERT(int,CONVERT(char(8),@CurrentDate,112)),因为样式 112 是 YYYYMMDD,但在我看来这有点混淆。