sql - Teradata 在 JOIN 语句中使用 CAST

标签 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] 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/

相关文章:

mysql - 我可以将多个 MySQL 行连接到一个字段中吗?

C# 解析 SqlDbType 转换

c++ - reinterpret_cast 更改指针值的任何真实示例?

sql - Teradata BTEQ : IF conditon , 使用运行时实际参数验证 SP 编译并导出 DDL

mysql - 组 SQL 2 表

sql - Rails 4 按 has_many 计数排序

datetime - 如何在 BigQuery SQL 中捕获失败的 CAST 语句?

SQL 选择记录,除非类型是某种类型且日期早于或与 id 相同

hadoop - 从配置单元到 teradata 的 Sqoop 导出不适用于时间戳字段

mysql - 如何根据起始点显示特定行数