[英]SQL Server updating new column based on another column from a different table
[英]sql server updating new column based on another column from same table
我有一个包含基于三列的复合主键的表。
(Unit, Account, service)
我还有另外两列: DOB
(保存生日)和Age
( Age
(这是一个新的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.