Sql Teradata在JOIN语句中使用CAST

Sql Teradata在JOIN语句中使用CAST,sql,casting,teradata,teradata-sql-assistant,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 通过这个连接,我在浮点型常量或隐式转换期间得到一个选择失败[3754]精度错误 我想我必须用这样一个演员陈述: inner join Table

我正在尝试向运行正常的现有报告添加一些字段。要添加这些字段,我需要连接到另一个表。问题是每个表上的字段类型不同

Table A / FieldA = Varchar (20)
Table B / FieldB = Decimal (19,0)
这是我的加入:

inner join TableA ta on ta.FieldA = b.FieldB 
通过这个连接,我在浮点型常量或隐式转换期间得到一个
选择失败[3754]精度错误

我想我必须用这样一个演员陈述:

inner join TableA ta on ta.FieldA = cast(b.FieldB as Varchar (20))
当我现在运行报告时,我没有得到任何结果,我希望至少有一行


任何内部连接的帮助都将不胜感激。谢谢。

请尝试以下操作,而不是演员阵容:

TO_CHAR(b.FieldB)

您在ta.FieldA=b.FieldB
上的联接
将导致从VarChar到Float的自动类型框。当您实际得到19位数字时,它将溢出浮点的15位精度

cast(b.FieldB as Varchar(20))时出现的问题可能是默认的小数分隔符,即123将返回
123。


您可以尝试
对ta.FieldA=TRIM(从b.FieldB开始拖尾“.”
但是最好的方法可能是
对_NUMBER(ta.FieldA)=b.FieldB
。这也将防止类型转换错误,因为它只会为坏数据返回NULL。

您能显示一些示例表数据吗?尝试转换为varchar(max)列,而不是字段…@dnoeth………谢谢您的建议。这对我来说也很有用。我知道这有时很方便,但隐式转换是有害的。如果按比例或多次这样做,可能值得一次性将联接列的数据类型转换为另一个表的数据类型。在此之后,数据类型将匹配,因此连接操作不需要进行转换。