我有一个出生日期列,我需要比较当前日期并将差异作为年龄返回。目前我正在使用以下查询:
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,但在我看来这有点混淆。
归档时间: |
|
查看次数: |
35188 次 |
最近记录: |