【问题标题】:Teradata using CAST in a JOIN statement在 JOIN 语句中使用 CAST 的 Teradata
【发布时间】:2018-09-21 19:35:44
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您能展示一些示例表数据吗?
  • 尝试转换为 varchar(max)
  • ,而不是字段...

标签: sql casting teradata teradata-sql-assistant


【解决方案1】:

代替演员,尝试:

TO_CHAR(b.FieldB)

【讨论】:

    【解决方案2】:

    您的加入 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。

    【讨论】:

    • @dnoeth............谢谢你的建议。这也对我有用。
    • 我知道它有时很方便,但隐式转换是邪恶的。
    • 如果大规模或多次执行此操作,可能值得一次性将连接列的数据类型转换为另一个表的数据类型。此后,数据类型将匹配,因此在 JOIN 操作中不需要转换。
    猜你喜欢
    • 2015-01-11
    • 2015-05-05
    • 2018-07-04
    • 2015-09-17
    • 1970-01-01
    • 2015-11-22
    • 1970-01-01
    • 2019-09-27
    • 1970-01-01
    相关资源
    最近更新 更多