【问题标题】:Need to calculate the final date in SQL需要在 SQL 中计算最终日期
【发布时间】:2020-12-11 06:04:44
【问题描述】:

大家好,

在表格中,我有 Completed Date (2020-01-28),我想使用 CompletedDate 列 + PeriodDays、PeriodsMonths 和 PeriodsYears 列中的任何数据来计算最终日期(续订日期)。例如,PeriodYears 表中的完成日期 (2020-01-28) + 1 年。续订日期为 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

【问题讨论】:

  • 用您正在使用的数据库标记您的问题。
  • 这两个表中是否有 Renewaldate 列,您想更新它还是只希望它作为计算列?
  • 不,我只是想作为一个计算列

标签: sql date sql-server-2008 time calculation


【解决方案1】:

这取决于您使用的 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,

【讨论】:

  • 感谢您的回复,但我认为您没有得到我的问题。基本上,我需要计算 RenewalDate 列,该列采用 CompleteDate 列 + Days、Months 和 Years 列中的任何数据。
  • 大同小异,把我回答中的select替换成update table name set RenewalDate =
  • 您好,我更新了当前的查询,您能帮我将您的计算添加到我的查询中吗?我不想更新数据库中的表。无论如何我们可以使用查询进行计算
  • 如果您不想更新表格,那么您需要在我的原始答案中进行选择语句。
【解决方案2】:

使用 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-08
    • 1970-01-01
    相关资源
    最近更新 更多