需要在 SQL 中计算最终日期

Need to calculate the final date in SQL

大家好,

在 table 中,我有完成日期 (2020-01-28),我想使用 CompletedDate 列 + PeriodDays、PeriodsMonths 中的任何数据来计算最终日期(更新日期)和 PeriodsYears 列。例如完成日期(2020-01-28)+PeriodYears中的1年table。 RenewalDate 将为 2021-01-28。任何帮助将不胜感激

这是我的查询 SELECT hes.CompletedDate, eve.PeriodDays, eve.PeriodMonths, eve.PeriodYears, FROM dbo.EventScheduled hes LEFT JOIN RequiredEvents eve ON hes.ID = eve.ID

这取决于您使用的 RDBMS,因为您需要使用日期函数。对于许多 RDBMS,

update tablename set RenewalDate = dateadd(coalesce(day, 0), PeriodDays
          dateadd(coalesce(month, 0), PeriodsMonths
            dateadd(coalesce(year, 0), PeriodsYears, CompletedDate)));
    
 

会起作用。将“tablename”替换为实际的 table。您首先必须添加新列:alter table tablename add column RenewalDate date,

使用 CASE 表达式选择要添加的正确间隔类型:

SELECT hes.CompletedDate, 
       eve.PeriodDays, eve.PeriodMonths, eve.PeriodYears,
       CASE 
         WHEN eve.PeriodDays IS NOT NULL THEN DATEADD(day, eve.PeriodDays, hes.CompletedDate)
         WHEN eve.PeriodMonths IS NOT NULL THEN DATEADD(month, eve.PeriodMonths, hes.CompletedDate)
         WHEN eve.PeriodYears IS NOT NULL THEN DATEADD(year, eve.PeriodYears, hes.CompletedDate)
       END Renewaldate
FROM dbo.EventScheduled hes LEFT JOIN RequiredEvents eve 
ON hes.ID = eve.ID