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
我有两个表 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