回答
您应该使用计算列来解决此问题。一些与此类似的定义:
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