2011-03-24 55 views
2

我有一個數據庫,其中包含2個字段DateOfBirthAge,分別用於存儲用戶DOB和年齡。根據DOB匹配服務器日期,我希望Age列每年自動遞增1。如何每年更新數據庫字段

什麼可能是實現這一目標的最佳方式?我正在使用asp.netsql server 2008

+4

你爲什麼存儲兩者兼而有之?您應該存儲DOB並計算年齡。 – 2011-03-24 05:10:22

回答

4

而不是同時存儲DateOfBirthAge,創建計算年齡表中computed column

[Age] AS datediff(year, DateOfBirth, getdate()) 

所以在YOUT創建表:

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

[您應該檢查邊界情況...]

+0

@Mitch:請你詳細說明一下,你計算的專欄是什麼意思,以及它如何幫助我每年更新年齡領域..自動...沒有手冊... – Abbas 2011-03-24 05:05:15

+0

是否可以顯示整個年齡,包括月份和天...在SQL服務器 – Abbas 2011-03-24 05:15:19

+0

@Mitch:你可以請幫助我也是一樣的.. 在此先感謝 – Abbas 2011-03-24 05:18:55