我试图将一些字段添加到运行得很好的现有报告中。要添加这些字段,我需要加入另一个表。问题是每个表上的字段是不同的类型
Table A / FieldA = Varchar (20)
Table B / FieldB = Decimal (19,0)
这是我的加入:
inner join TableA ta on ta.FieldA = b.FieldB
通过此加入,我得到SELECT Failed [3754] Precision error in FLOAT type constant or during implicit conversions
。
我认为我必须使用这样的CAST语句:
inner join TableA ta on ta.FieldA = cast(b.FieldB as Varchar (20))
当我现在运行报告时,我没有得到任何结果,我预计至少有一行。
非常感谢内部联接的任何帮助。感谢。
答案 0 :(得分:1)
您的加入on ta.FieldA = b.FieldB
将导致从VarChar到Float的自动类型转换。当你实际得到19位数时,它将溢出浮点数的15位精度。
当您cast(b.FieldB as Varchar (20))
可能是默认的小数分隔符时出现问题,即123将返回123.
。
您可以尝试on ta.FieldA = TRIM(TRAILING '.' FROM b.FieldB)
,但最好的方式可能是on TO_NUMBER(ta.FieldA) = b.FieldB
。这也可以防止类型转换错误,因为它只是为坏数据返回NULL。
答案 1 :(得分:0)
而不是演员,请尝试:
TO_CHAR(b.FieldB)