我有一个数据库,其中包含2个名为DateOfBirth
和Age
的字段,分别用于存储用户DOB和年龄。根据DOB匹配服务器日期,我希望Age
列每年自动递增1。
实现这一目标的最佳方法是什么?我正在使用 asp.net 和 sql server 2008 。
答案 0 :(得分:4)
不是同时存储DateOfBirth
和Age
,而是在计算年龄的表格上创建computed column:
[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
[你应该检查边界情况......]