0
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

数据类型

  • rev_timeout - smalldatetime
  • rev_timein - smalldatetime
  • signature_datetime - 日期时间
  • multiple_flag - 位
  • clientvisit_id - 整数。

错误

将表达式转换为数据类型 smalldatetime 的算术溢出错误

SQL Server 正在转换clientvisit_idsmalldatetime,我不知道为什么,因为我在这里看不到与另一个 datetime 的比较。当DATEDIFF returns a 3. 有人可以解释为什么会发生这种情况并提供解决方案吗?

4

1 回答 1

2

CASE在 T-SQL 中是一个最终返回单个原子值的表达式。CASE因此,表达式的所有部分都应返回相同的数据类型。

不是这里的情况!内在CASE回报

THEN ClientVisit.rev_timein 

这是 datatype smalldatetime,而ELSE部分:

ELSE ClientVisit.clientvisit_id 

返回数据类型的值int

T-SQL 将尝试根据此数据类型优先级列表转换这些值,因此尝试将 转换int为 asmalldatetime并失败。

学习什么CASE是一个表达式,它应该从它的所有分支和分支中返回相同的数据类型......THENELSE

于 2016-08-16T05:30:52.920 回答