SQL Server Management Studio Рассчитать возраст

Я создал таблицу в SSMS, и она имеет следующие поля:

  • ИМЯ Варчар (50)
  • Дата рождения
  • Десятичный возраст (3,0)

Я хочу использовать формулу для поля AGE в конструкторе таблиц, чтобы рассчитать возраст человека на основе его ДНЯ РОЖДЕНИЯ и текущей даты.

Например, NAME = 'Joe Blow' и BIRTHDATE = '1/1/1970'. Я хотел бы, чтобы ВОЗРАСТ смог рассчитать это и вернуть возраст "46".

1 ответ

Это немного сложно. Заманчиво использовать:

select datediff(year, birthdate, getdate())

Однако при этом рассчитывается количество границ года (1 января) между двумя датами. И это не возраст.

Один из способов получить фактический возраст - вычесть текущий день года из каждого значения. Эта нормализация должна работать:

select datediff(year,
                dateadd(day, 1 - datepart(dy, birthdate), birthdate),
                dateadd(day, 1 - datepart(dy, birthdate), getdate())
               )

Даже это может иметь незначительную ошибку в високосные годы. Итак, вы можете использовать грубую силу:

select (datediff(year, birthdate, getdate()) - 
        (case when datepart(month, birthdate) * 100 + datepart(day, birthdate) >
                   datepart(month, getdate()) * 100 + datepart(day, birthdate)
              then 1 else 0
         end)
        )
Другие вопросы по тегам