我正在尝试向运行良好的现有报告添加一些字段。要添加这些字段,我需要连接到另一个表。问题是每个表上的字段类型不同
Table A / FieldA = Varchar (20)
Table B / FieldB = Decimal (19,0)
这是我的加入:
inner join TableA ta on ta.FieldA = b.FieldB
通过此连接,我收到SELECT Failed [3754] FLOAT 类型常量或隐式转换期间出现精度错误
。
我想我必须使用这样的 CAST 语句:
inner join TableA ta on ta.FieldA = cast(b.FieldB as Varchar (20))
当我现在运行报告时,我没有得到任何结果,并且我预计至少有 1 行。
任何有关内部联接的帮助将不胜感激。谢谢。
最佳答案
您的加入on ta.FieldA = b.FieldB
将导致从 VarChar 到 Float 的自动类型转换。当你实际得到 19 位数字时,它将溢出 Float 的 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。
关于sql - Teradata 在 JOIN 语句中使用 CAST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49783164/