Teradata - 将 char 与 varchar 连接起来

Teradata - joining char with varchar

我有两个表 A 和 B。我想在 A 上连接 A 和 B。col_1 = B。col_2。 col_1 的数据类型为 VARCHAR(35),而 col_2 的数据类型为 CHAR(35)。以下语句在连接两个表时出现问题:没有返回记录,这意味着无法连接两个表。 col_1通常有8-11位数字,与col_2相同。我的理解是,即使我使用了 "LENGTH(B.col_2 )-1",但只要 col_1 和 col_2 的值相同,尾随空格应该不是问题。

是什么导致了这个问题?

ON A.col_1 =SUBSTR(B.col_2 ,1,LENGTH(B.col_2 )-1)

谢谢!

我猜 B 是字符。 这将向您解释这里发生了什么:

select char_length(cast('abc' as char(10)));

10

您的 substr 不是采用 char 字符串的实际长度而是填充后的长度,因此您得到的是原始字符串减 1 space。

为了解决问题使用-

SUBSTR(B.col_2 ,1,LENGTH(cast(B.col_2 as varchar(35))-1)

SUBSTR(B.col_2 ,1,LENGTH(rtrim(B.col_2)-1)

... 是的,char/varchar 与比较无关紧要

select 1 where cast('abc' as varchar(10)) = cast('abc' as char(10))

1