错误:将varchar转换为数据类型numeric的算术溢出错误

时间:2014-08-12 16:32:06

标签: sql

select distinct f1.[record] from [field] f1 where ((ABS((Cast((Select [value] from dbo.getFieldTopTable(f1.[record], 'ar_essay1_read1')) as Decimal(5,3))) - (Cast((select [value] from dbo.getFieldTopTable(f1.[record], 'ar_essay1_read2')) as Decimal(5,3)))) > 1.0) 
or (ABS((Cast((Select [value] from dbo.getFieldTopTable(f1.[record], 'ar_essay2_read1')) as Decimal(5,3))) - (Cast((select [value] from dbo.getFieldTopTable(f1.[record], 'ar_essay2_read2')) as Decimal(5,3)))) > 1.0) 
or (ABS((Cast((Select [value] from dbo.getFieldTopTable(f1.[record], 'ar_essay3_read1')) as Decimal(5,3))) - (Cast((select [value] from dbo.getFieldTopTable(f1.[record], 'ar_essay3_read2')) as Decimal(5,3)))) > 1.0) 
or (ABS((Cast((Select [value] from dbo.getFieldTopTable(f1.[record], 'ar_essay4_read1')) as Decimal(5,3))) - (Cast((select [value] from dbo.getFieldTopTable(f1.[record], 'ar_essay4_read2')) as Decimal(5,3)))) > 1.0))

存储在这些字段中的数据是真实设置的,范围是从.001到4.00(它应该是int吗?)

我们只是想找到两个分数之差大于1的记录

我们也只是尝试将cast _转换为十进制而没有精度,它会遗漏应该在查询中的记录......

我们有没有想过的事情?

2 个答案:

答案 0 :(得分:0)

您根本不需要转换这些值,问题很可能是dbo.getFieldTopTable()函数返回的值的数据类型。确保它返回一个带小数的值。

答案 1 :(得分:0)

小数点右侧的数字不应导致截断错误。尝试DECIMAL(9,3)。它消耗的内存与DECIMAL(5,3)相同。