繁体   English   中英

如何在触发更新中按日、月、年计算年龄 SQL

[英]How to calculate age by day, month and year in in trigger update SQL

我正在使用这段代码,但出了点问题。

我尝试使用许多代码但未能实现等式。

我输入计算年龄加日加日加月加年加年

ALTER TRIGGER [dbo].[trg_DeasignTeamMonthly]
ON [dbo].[StudentData]
AFTER INSERT, DELETE, UPDATE
AS 
BEGIN
    UPDATE dbo.StudentData 
    SET [Day] = DATEDIFF(DAY, StudentData.DateOfBirth,[dbo].StudentData.DateToDay) / 365

    UPDATE dbo.StudentData 
    SET [Month] = MONTH([dbo].StudentData.DateToDay) - 1

    UPDATE dbo.StudentData 
    SET [Year] = YEAR([dbo].StudentData.DateToDay) - YEAR([dbo].StudentData.DateOfBirth)
END

请检查此屏幕截图以查看我想要的内容

为此,我创建了一个用于计算的存储过程,您可以在任何需要的地方使用它(触发器、其他存储过程、)

CREATE PROCEDURE CalcDurationRange
    @StartDT DATETIME,
    @EndDT DATETIME,
    @Year INT OUT,
    @Month INT OUT,
    @Day INT OUT
AS 
    DECLARE @xDate DATETIME = DATEADD(YEAR,YEAR(@EndDT)-YEAR(@StartDT),@StartDT)

    IF(@xDate>@EndDT)
        SET @xDate = DATEADD(YEAR,-1,@xDate)
    
    SET @Year = DATEDIFF(YEAR,@StartDT,@xDate)   
    SET @Month = DATEDIFF(MONTH,@xDate,@EndDT)
        
    IF(DATEADD(MONTH,@Month,@xDate)>@EndDT)
        SET @Month = @Month -1  
     
    SET @Day = DATEDIFF(DAY,DATEADD(MONTH,@Month,@xDate),@EndDT)
GO

使用此 SP 的示例:

DECLARE @xYear INT, @xMonth INT, @xDay INT
EXEC CalcDurationRange 
    '1987-12-01',
    '2021-10-01',
    @xYear  OUT,
    @xMonth OUT,
    @xDay OUT
    
PRINT @xYear         
PRINT @xMonth
PRINT @xDay

暂无
暂无

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

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