Teradata:与数据类型不同,如何进行 LEFT OUTER JOIN?
Teradata: How to LEFT OUTER JOIN unlike datatypes?
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 "The format or data contains a bad character" 错误。在查明问题的确切原因后,似乎 是由于 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)
不幸的是,从 DR table 中转换为 vchar returns 空值,因为没有匹配项。转换为 bigint returns 和以前一样的错误。部分问题在于一列的数字中包含逗号,而另一列包含逗号(例如“66993001968”和“66,993,001,968”)。
所以我尝试使用 REPLACE 删除逗号,但 Teradata 告诉我这不是正确的用法。更具体地说,这个错误:"SELECT Failed. [3706] Syntax error: expected something between the 'ON' keyword and the 'REPLACE' keyword."
这是我正在尝试的:
LEFT OUTER JOIN DB.Table2 RC ON REPLACE(DR.NEW_NBR_CLMN, ',', '') = RC.VCHAR_COLUMN
任何有关整体连接问题或更具体的 REPLACE 问题的帮助将不胜感激!
示例数据:
DR Table 示例:
RC Table 示例:
期望的结果:
您可以使用 regexp_replace()
删除所有非数字:
ON DR.NEW_NBR_CLMN = cast(regexp_replace(RC.VCHAR_COLUMN, '[^0-9]', '') as bigint)
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 "The format or data contains a bad character" 错误。在查明问题的确切原因后,似乎 是由于 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)
不幸的是,从 DR table 中转换为 vchar returns 空值,因为没有匹配项。转换为 bigint returns 和以前一样的错误。部分问题在于一列的数字中包含逗号,而另一列包含逗号(例如“66993001968”和“66,993,001,968”)。
所以我尝试使用 REPLACE 删除逗号,但 Teradata 告诉我这不是正确的用法。更具体地说,这个错误:"SELECT Failed. [3706] Syntax error: expected something between the 'ON' keyword and the 'REPLACE' keyword."
这是我正在尝试的:
LEFT OUTER JOIN DB.Table2 RC ON REPLACE(DR.NEW_NBR_CLMN, ',', '') = RC.VCHAR_COLUMN
任何有关整体连接问题或更具体的 REPLACE 问题的帮助将不胜感激!
示例数据:
DR Table 示例:
RC Table 示例:
期望的结果:
您可以使用 regexp_replace()
删除所有非数字:
ON DR.NEW_NBR_CLMN = cast(regexp_replace(RC.VCHAR_COLUMN, '[^0-9]', '') as bigint)