繁体   English   中英

sql server根据同一表中的另一列更新新列

[英]sql server updating new column based on another column from same table

我有一个包含基于三列的复合主键的表。

(Unit, Account, service)

我还有另外两列: DOB (保存生日)和AgeAge (这是一个新的int列,需要根据DOB进行更新,其结果将是Years的整数值)

我知道如何检索年龄的结果

select datediff(Year,DOB,GETDATE()) as AGE

但不确定如何根据行DOB数据更新整个表。

列是Unit, Account, Service, DOB, Age

根据评论,保留Age并不明智,因为Age每天都在变化(如果您的用户所在的时区不同,可能会更频繁)。

另外,您的Age vs DOB算法不准确-请参见此处以获得更好的算法

因此,在IMO中,这是一个非持久化COMPUTED列有意义的情况,如下所示:

ALTER TABLE Person add Age 
AS DateDiff(yy,DOB,CURRENT_TIMESTAMP) 
- CASE WHEN DATEPART  (mm,DOB) <= DATEPART(mm,CURRENT_TIMESTAMP) 
       and DATEPART(dd, DOB) <= DATEPART(dd,CURRENT_TIMESTAMP)
    THEN 0 
    ELSE 1
  END

摆脱age列并按如下方式计算年龄:

SELECT DATEDIFF(yy, DOB, getdate()) AS age FROM daffyduck

在极少数情况下,您需要存储年龄等项目。 由于年龄每天都会变化,因此您将不得不经常更新记录。 相反,最好存储一个固定值,例如可以计算的出生日期。 由于这个原因,大多数DBMS都提供了执行日期算术的功能。

要回答您的问题:

UPDATE dob.MyTable SET Age = datediff(Year,DOB,GETDATE());

这将根据您的要求更新整个表格。

但是,我强烈建议您在这里查看所有其他答案。 特别是上述公式中有关计算误差的那些。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM