Teradata - 使用varchar加入char

时间:2017-02-21 16:09:20

标签: sql join teradata sqldatatypes

我有两个表A和B.我想在A.col_1 = B.col_2上加入A和B. 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)

谢谢!

1 个答案:

答案 0 :(得分:1)

我猜B是char。 这将解释你在这里发生了什么:

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

10

您的substr不会使用char字符串的实际长度,而是填充长度,因此您将获得原始字符串减去1个空格。

为了解决问题,请使用 -

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