Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要在SQL中计算最终日期_Sql_Date_Sql Server 2008_Time_Calculation - Fatal编程技术网

需要在SQL中计算最终日期

需要在SQL中计算最终日期,sql,date,sql-server-2008,time,calculation,Sql,Date,Sql Server 2008,Time,Calculation,大家好 在表中,我有完成日期(2020-01-28),我想使用CompletedDate列+PeriodDays、PeriodMonth和PeriodsYears列中的任何数据来计算最终日期(Renewaldate)。例如,PeriodYears表中的完成日期(2020-01-28)+1年。更新日期为2021-01-28。任何帮助都将不胜感激 这是我的问题 从dbo.event中选择hes.CompletedDate、eve.PeriodDays、eve.PeriodMonths、eve.Per

大家好

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

这是我的问题
从dbo.event中选择hes.CompletedDate、eve.PeriodDays、eve.PeriodMonths、eve.PeriodYears计划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”替换为实际的表。首先必须添加新列:alter table tablename add column RenewalDate date,

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

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

用您正在使用的数据库标记您的问题。这两个表中是否有列Renewaldate,您想更新它,还是只想将其作为计算列?不,我只想作为计算列谢谢您的回答,但我想您没有理解我的问题。基本上,我需要计算RenewalDate列,该列采用CompletedDate列+天、月和年列中的任何数据。这几乎是一样的,只要用更新表名set RenewalDate=Hi替换我答案中的select,我更新了当前查询,你能帮我将计算添加到我的查询中吗。我不想更新数据库中的表。我们是否可以使用查询进行计算?如果不想更新表,则需要在我的原始答案中使用select语句。