COUNT(DISTINCT CASE WHEN DATEDIFF(d, ClientVisit.rev_timeout, ClientVisit.signature_datetime) = 3 THEN
CASE WHEN ClientVisit.multiple_flag = 1
THEN ClientVisit.rev_timein
ELSE ClientVisit.clientvisit_id END
END
数据类型
错误
将表达式转换为数据类型smalldatetime的算术溢出错误
SQL Server正在将clientvisit_id
转换为 smalldatetime ,我不知道为什么,因为我在这里看不到与其他日期时间的比较。只是DATEDIFF returns a 3
时的计数增量。有人可以解释为什么会发生这种情况并找到解决方案吗?
答案 0 :(得分:2)
CASE
是表达式,最终返回单个原子值。因此,CASE
表达式的所有部分都应返回相同的数据类型。
这是不的情况!内部CASE
返回
THEN ClientVisit.rev_timein
是数据类型smalldatetime
,而ELSE
部分:
ELSE ClientVisit.clientvisit_id
返回数据类型int
的值。
T-SQL会尝试转换这些值according to this data type precedence列表,从而尝试将int
转换为smalldatetime
并失败。
学习内容:CASE
是一个表达式,它应该从所有它返回相同的数据类型 { {1}}和THEN
分支......