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)
)