Вместо того, чтобы хранить DateOfBirth
и Age
, создайте вычисляемый столбец в таблице, которая вычисляет возраст:
[Age] AS datediff(year, DateOfBirth, getdate())
Итак, при создании таблицы:
-- Create Table with computed column
CREATE TABLE [dbo].[CCtest]
(
[id] [int] not NULL,
[DateOfBirth] [datetime] NULL,
-- etc...
[Age] AS datediff(year, DateOfBirth, getdate())
)
GO
Если вы хотите сохранить вычисленное значение, добавьте ключевое слово PERSISTED
.
Одна возможность, если вы хотите, чтобы возраст отображался в годах и месяцах:
[AgeInDays] AS datediff(day, DateOfBirth, getdate())
затем создайте представление таблицы, которое будет AgeInDays
форматироваться по годам и месяцам.
Вот еще одна возможность, используя вычисляемый столбец [AgeYears]
:
create view vwCCtestAge
AS
select
id,
dateofbirth,
cast([AgeYears] as varchar(4)) + ' years ' +
cast(datediff(month, DateOfBirth, getdate())
- case when (AgeYears > 0) then (AgeYears - 1)*12
else 0
end as varchar(4)) + ' months' as Age
from cctest2
GO
[Вы должны проверить граничные случаи ...]