如何给临时表添加由出生日期计算的age列并完成赋值?
临时表中计算年龄并写入新增列的解决方案
你当前的操作仅通过SELECT语句计算出了年龄值,但并未将计算结果写入到临时表的age列中,所以查询age列会显示NULL。需要补充UPDATE更新操作来填充数据,完整步骤如下:
- 新增
age列(你已完成这一步)
ALTER TABLE #DEMOGRAPHICS ADD age INT;
- 计算年龄并写入
age列
UPDATE #DEMOGRAPHICS SET age = DATEDIFF(YY, BIRTH_DATE, GETDATE()) - CASE WHEN MONTH(BIRTH_DATE) > MONTH(GETDATE()) OR (MONTH(BIRTH_DATE) = MONTH(GETDATE()) AND DAY(BIRTH_DATE) > DAY(GETDATE())) THEN 1 ELSE 0 END;
- 验证结果
SELECT BIRTH_DATE, age FROM #DEMOGRAPHICS;
如果后续需要频繁使用年龄值,也可以考虑将age设置为计算列,这样不需要手动更新,数据会自动同步:
ALTER TABLE #DEMOGRAPHICS ADD age AS ( DATEDIFF(YY, BIRTH_DATE, GETDATE()) - CASE WHEN MONTH(BIRTH_DATE) > MONTH(GETDATE()) OR (MONTH(BIRTH_DATE) = MONTH(GETDATE()) AND DAY(BIRTH_DATE) > DAY(GETDATE())) THEN 1 ELSE 0 END ) PERSISTED;
注:
PERSISTED关键字会将计算结果物理存储在表中,提升查询性能,适合数据不频繁变更的场景。
内容的提问来源于stack exchange,提问作者Anna
相关产品推荐
相关产品推荐

