Teradata在JOIN语句中使用CAST

时间:2018-04-11 19:35:51

标签: sql casting teradata teradata-sql-assistant

我试图将一些字段添加到运行得很好的现有报告中。要添加这些字段,我需要加入另一个表。问题是每个表上的字段是不同的类型

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))

当我现在运行报告时,我没有得到任何结果,我预计至少有一行。

非常感谢内部联接的任何帮助。感谢。

2 个答案:

答案 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)