如何在MS SQL中获得2个不同日期数据类型之间的差异?

时间:2019-06-14 13:39:53

标签: sql sql-server

因此,我有两列EnrollmentStartDate和EligibilityStartDate,我需要获取两者之间的差异(enroll-elibil),然后获取从合格日期开始活跃客户的平均天数。

问题在于其中一个表中的EnrollmentStartDate为 datetime2 格式,而另一个表中的EligibilityStartDate为 date 格式。

我收到以下错误

消息8117,第16级,状态1,第16行 操作数数据类型datetime2对于减法运算符无效。

是否可以将一个转换为另一个?我该怎么办?

    select clientid, avg(EnrollmentStartDate - EligibilityStartDate) as avg_daysFROM dbo.Client  inner join  dbo.ClientEnrollment ON dbo.Client.ClientId = dbo.ClientEnrollment.ClientId order by avg_days

2 个答案:

答案 0 :(得分:1)

DATEDIFF()应该能够处理此问题:

select clientid,
       avg(datediff(day, EligibilityStartDate, EnrollmentStartDate) * 1.0
          )
. . .

* 1.0是这样,因此平均值不会计算为整数。

答案 1 :(得分:0)

  1. 您不能在DATE和 DATETIME2数据类型。您必须在SQL中使用DATEDIFF函数 服务器。
  2. 如果要在SELECT中引入任何列并使用聚合函数,则需要GROUP BY
  3. 此外,建议您在表中使用别名 为了提高可读性,查询中涉及多个表。

假设EnrollmentStartDate和EligibilityStartDate列在dbo.ClientEnrollment表中,

SELECT  C.ClientId
        ,avg_days = AVG(DATEDIFF(DAY, CE.EligibilityStartDate, CE.EnrollmentStartDate)) 
FROM    dbo.Client C
        INNER JOIN  dbo.ClientEnrollment CE
            ON C.ClientId = CE.ClientId 
GROUP   BY C.ClientId           
ORDER   BY avg_days