我有两个表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)
谢谢!
发布于 2017-02-21 16:21:24
我想B是半焦。这将解释这里发生的事情:
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
https://stackoverflow.com/questions/42372372
复制相似问题