0
SELECT DR.column
FROM DB.Table RCT
LEFT OUTER JOIN DB.Table2 RC ON RCT.NBR_CLMN = RC.NBR_CLMN
LEFT OUTER JOIN DB.Table3 DR ON DR.NEW_NBR_CLMN = RC.VCHAR_COLUMN

在 Teradata SQL Assistant 中运行上面的 SQL 代码会给我一个 2620“格式或数据包含错误字符”错误。在找到问题的确切原因后,似乎是由于 DR.NEW_NBR_CLMN 和 RC.VCHAR_COLUMN 是不同的数据类型,因此隐式转换失败。

我已经尝试使用 CAST AS VCHAR 并在连接的两侧使用 CAST AS BIGINT ,如下所示:

LEFT OUTER JOIN DB.Table3 DR ON CAST(DR.NEW_NBR_CLMN AS BIGINT) = CAST(RC.VCHAR_COLUMN AS BIGINT)

不幸的是,转换为 vchar 会从 DR 表中返回空值,因为没有匹配项。转换为 bigint 会返回与以前相同的错误。部分问题是一列在数字中包含逗号,而另一列包含逗号(例如“66993001968”和“66,993,001,968”)。

所以我尝试使用 REPLACE 删除逗号,但 Teradata 告诉我它的用法不正确。更具体地说,此错误:“选择失败。[3706] 语法错误:预期在 'ON' 关键字和 'REPLACE' 关键字之间存在某些内容。”

这是我正在尝试的:

LEFT OUTER JOIN DB.Table2 RC ON REPLACE(DR.NEW_NBR_CLMN, ',', '') = RC.VCHAR_COLUMN

任何有关整体加入问题或更具体的 REPLACE 问题的帮助将不胜感激!

示例数据:

DR 表示例: DR 表示例

RC 表示例:

RC 表示例

期望的结果: 期望的结果

4

1 回答 1

1

您可以使用regexp_replace()删除所有非数字:

ON DR.NEW_NBR_CLMN = cast(regexp_replace(RC.VCHAR_COLUMN, '[^0-9]', '') as bigint)
于 2019-12-17T20:10:05.527 回答