回答
您應該使用計算列來解決此問題。一些與此類似的定義:
ALTER TABLE Customers ADD Age AS datediff(year, DOB ,getdate())
在BlackWasp從和可用的更多信息,採取原始語句。
編輯:
MSDN解釋爲計算列:
計算列由能夠在同一個表使用其它 列的表達式來計算。該表達式可以是一個或多個運算符的名稱,常量,函數以及這些連接的任何組合的非計算列 。表達式不能是子查詢。
除非另有規定,否則計算列是虛擬列, 未物理存儲在表中。每次在查詢中引用它們的值時,都會重新計算它們的值 。數據庫引擎在CREATE TABLE和ALTER TABLE語句中使用 PERSISTED關鍵字 將計算列物理存儲在表中。它們的值是 ,當它們的計算中的任何列發生更改時都會更新。通過 將計算列標記爲PERSISTED,您可以在確定性但不精確的計算列上創建索引。另外,如果計算列引用CLR函數,則數據庫引擎 無法驗證函數是否確實是確定性的。在此 的情況下,計算列必須是PERSISTED,以便可以在其上創建索引 。有關更多信息,請參閱在計算的 列上創建索引。
計算列用作CHECK,對外:
計算列可以在選擇列表,WHERE子句,ORDER BY 條款,或任何其它位置中的正則表達式可以是 使用的,但有以下例外可以使用KEY或NOT NULL約束必須標記爲 PERSISTED。如果計算列值由 確定性表達式定義,並且索引 列允許結果的數據類型,則計算列可用作索引中的鍵列或作爲主鍵或UNIQUE約束的任何部分。
例如,如果表中有整數列a和b,計算列A + B可以 索引,但在計算列a + DATEPART(DD,GETDATE())不能被索引,因爲 值可能會改變>在隨後的調用中。
計算列不能是INSERT或UPDATE語句的目標。
數據庫引擎根據使用的表達式自動確定 計算列的可空性。大多數 表達式的結果即使僅存在不可空列 ,也被視爲可以爲空,因爲可能的下溢或溢出也會產生 空結果。使用COLUMNPROPERTY函數與AllowsNull屬性調查表中任何計算的 列的可空性。通過指定ISNULL(check_expression,常量), (其中常量是一個非空值代替任何空結果),可以爲空的表達式可變爲 不可空的表達式。
我建議你在這裏添加一些信息,而不僅僅是鏈接。就像什麼是計算列一樣,它可以被執行,可以被索引,等等。 –
完成。我冒昧地引用了MSDN – SchmitzIT
很好的描述,但它確實沒有找到年齡。它發現兩個日期之間的整年差異。 DOB ='2012-12-31',getdate()='2013-01-01'= 1年 –
這是越來越時代的正確方法:
alter table <yourtable> add age as datediff(year, DOB, getdate())- case when month(DOB)*32 + day(DOB) > month(getdate()) * 32 + day(getdate()) then 1 else 0 end
代碼片斷
ALTER TABLE
TheTable
ADD
DOB AS
CASE
WHEN
MONTH(Birth) > MONTH(ISNULL(Death, SYSDATETIME()))
OR (
MONTH(Birth) = MONTH(ISNULL(Death, SYSDATETIME()))
AND DAY(Birth) >= DAY(ISNULL(Death, SYSDATETIME()))
)
THEN
DATEDIFF(YEAR, Birth, ISNULL(Death, SYSDATETIME())) - 1
ELSE
DATEDIFF(YEAR, Birth, ISNULL(Death, SYSDATETIME()))
END
與自動生成的列創建表,
CREATE TABLE Person2
(Id int IDENTITY(1,1) NOT NULL, Name nvarchar(50),
DOB date, Age AS DATEDIFF(YEAR, DOB ,GETDATE()))
- 1. 如何從另一個列表中創建數據計算列
- 2. 如何創建計算列從另一臺
- 3. 從另一列計算的列?
- 4. 創建從用於創建2較早計算列的表達式計算列
- 5. 創建一個新的計算列
- 6. 從另一個陣列創建陣列
- 7. 如何使用計算列來計算同一視圖中的另一列
- 8. 如何創建一個視圖,以獲得從另一個表中計算出的列值
- 9. haskell如何從另一個列表創建一個新列表?
- 10. 如何從另一個列表創建一個嵌套列表?
- 11. SQL計算列和計算創建表
- 12. 根據另一列的計算列laravel
- 13. 使用另一個表中的數據創建計算列
- 14. 通過在另一個查詢中新創建的計算列
- 15. 如何計算一列到另一列的百分比?
- 16. 創建一列來計算另一列中相同數字之間的距離
- 17. MySQL Math - 從另一列計算值
- 18. 計算基於另一列
- 19. 在計算後基於另一列的mySQL中的計算列
- 20. 如何計算從查詢創建的臨時列的SUM
- 21. 如何計算另一列和另一個表中的日期?
- 22. 基於另一個計算列的計算列?
- 23. 如何根據功能從另一個列表創建列表?
- 24. 如何從窗口順序的另一列計算RANK?
- 25. 在邏輯上從另一列的一列創建多個列
- 26. 用awk計算另一列中列的出現次數
- 27. 返回另一列是否爲空計算出的比特列
- 28. 計算另一列中列的出現次數
- 29. 計算列百分比另一列SQL
- 30. 根據另一列值計算列值
以及新添加的行如何? – paragy
只有當您選擇表格的值時,或者當您訪問任何人時纔會知道年齡是否最新。所以你可以使用觸發器/存儲程序來做到這一點..不是嗎? [類似的線路上的東西](http://stackoverflow.com/questions/12329149/calculating-age-from-birthday-with-oracle-plsql-trigger-and-insert-the-age-in-ta) – bonCodigo
我會只需在表格頂部創建一個視圖,最後一列視圖定義爲'datediff(yy,DOB,getUTCDate())'。 – Vikdor