因此,我有两列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
答案 0 :(得分:1)
DATEDIFF()
应该能够处理此问题:
select clientid,
avg(datediff(day, EligibilityStartDate, EnrollmentStartDate) * 1.0
)
. . .
* 1.0
是这样,因此平均值不会计算为整数。
答案 1 :(得分:0)
假设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