Рассчитать возраст по целому полю - PullRequest
0 голосов
/ 24 сентября 2019

Поле даты, по которому я должен рассчитать возраст, равно yyyymmdd.

Я пробовал ниже и конвертировал getdate в yyyymmdd формат, но, похоже, не могу получить возраст от этого.Я пробовал с datediff, но не могу заставить его работать.

 SELECT CLAIM.BTHDAT
     , (CONVERT(VARCHAR(8),GETDATE(), 112) - CLAIM.BTHDAT)/365.25   
 FROM CLAIM

Ответы [ 3 ]

1 голос
/ 24 сентября 2019

Предположим, вы хотите ВОЗРАСТИТЬ В ЛЕТАХ ... Как насчет datediff()

Select Age = datediff(YEAR,left(CLAIM.BTHDAT,8),getdate())
 From  CLAIM
0 голосов
/ 24 сентября 2019

Здесь можно точно определить возраст, при условии, что все даты будут соответствовать формату yyyymmdd и будут действительными датами.

SELECT CLAIM.BTHDAT
 ,DATEDIFF( YY, CONVERT(CHAR(8),CLAIM.BTHDAT), GETDATE()) 
   - CASE WHEN SUBSTRING( CONVERT( char(8), GETDATE(), 112), 5, 4) < SUBSTRING( CONVERT( char(8), BTHDAT), 5, 4)  THEN 1 ELSE 0 END
 FROM CLAIM
0 голосов
/ 24 сентября 2019

Попробуйте это ....

SELECT CLAIM.BTHDAT, DATEDIFF(hour,CLAIM.BTHDAT,GETDATE())/8766.0 AS AgeYearsDecimal
    ,CONVERT(int,ROUND(DATEDIFF(hour,CLAIM.BTHDAT,GETDATE())/8766.0,0)) AS AgeYearsIntRound
    ,DATEDIFF(hour,CLAIM.BTHDAT,GETDATE())/8766 AS AgeYearsIntTrunc  FROM CLAIM

Если вы хотите, чтобы Возраст в день, месяц и год, то вы можете попробовать это. Создать функцию для расчета возраста и вызвать его в запросе, как это

    Create function [dbo].[GetAge](@dayOfBirth datetime, @today datetime)
       RETURNS varchar(100)
    AS

    Begin
      DECLARE @tmpdate datetime, @date datetime, @years int, @months int, @days int

    SELECT @tmpdate = @dayOfBirth

    SELECT @years = DATEDIFF(yy, @tmpdate, @today) - CASE WHEN (MONTH(@tmpdate) > MONTH(@today)) OR (MONTH(@tmpdate) = MONTH(@today) AND DAY(@tmpdate) > DAY(@today)) THEN 1 ELSE 0 END
    SELECT @tmpdate = DATEADD(yy, @years, @tmpdate)
    SELECT @months = DATEDIFF(m, @tmpdate, @today) - CASE WHEN DAY(@tmpdate) > DAY(@today) THEN 1 ELSE 0 END
    SELECT @tmpdate = DATEADD(m, @months, @tmpdate)
    SELECT @days = DATEDIFF(d, @tmpdate, @today)

    return cast(@years as varchar(2)) + ' years,' + cast(@months as varchar(2)) + ' months,' + cast(@days as varchar(3)) + ' days'
    end


Select  CLAIM.BTHDAT,dbo.[GetAge](CLAIM.BTHDAT,getdate()) From CLAIM
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...