smalldatetime 的算术溢出错误
Arithmetic overflow error for smalldatetime
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 - 小日期时间
- rev_timein - 小日期时间
- signature_datetime - 日期时间
- multiple_flag - 位
- clientvisit_id - 整数。
错误
Arithmetic overflow error converting expression to data type smalldatetime
SQL 服务器正在将 clientvisit_id
转换为 smalldatetime 我不知道为什么,因为我在这里没有看到与另一个日期时间的比较。 DATEDIFF returns a 3
时只是一个计数增量。有人可以解释为什么会发生这种情况并提供解决方案吗?
T-SQL 中的 CASE
是一个 表达式 ,最终 return 是一个单一的原子值。因此,CASE
表达式的所有部分 应该 return 相同的数据类型。
这里不是这种情况!内层CASE
returns
THEN ClientVisit.rev_timein
数据类型为smalldatetime
,而ELSE
部分:
ELSE ClientVisit.clientvisit_id
returns 数据类型的值 int
.
T-SQL 将尝试转换这些值 according to this data type precedence 列表,因此尝试将 int
转换为 smalldatetime
并失败。
要学什么:CASE
是一个表达式,它应该return 来自所有 THEN
和 ELSE
分支的相同数据类型 ...
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 - 小日期时间
- rev_timein - 小日期时间
- signature_datetime - 日期时间
- multiple_flag - 位
- clientvisit_id - 整数。
错误
Arithmetic overflow error converting expression to data type smalldatetime
SQL 服务器正在将 clientvisit_id
转换为 smalldatetime 我不知道为什么,因为我在这里没有看到与另一个日期时间的比较。 DATEDIFF returns a 3
时只是一个计数增量。有人可以解释为什么会发生这种情况并提供解决方案吗?
CASE
是一个 表达式 ,最终 return 是一个单一的原子值。因此,CASE
表达式的所有部分 应该 return 相同的数据类型。
这里不是这种情况!内层CASE
returns
THEN ClientVisit.rev_timein
数据类型为smalldatetime
,而ELSE
部分:
ELSE ClientVisit.clientvisit_id
returns 数据类型的值 int
.
T-SQL 将尝试转换这些值 according to this data type precedence 列表,因此尝试将 int
转换为 smalldatetime
并失败。
要学什么:CASE
是一个表达式,它应该return 来自所有 THEN
和 ELSE
分支的相同数据类型 ...