2017-02-21 6 views
1

私はテーブルAとテーブルBが2つあります。そして、AとBをA.col_1 = B.col_2で結合したいと思います。 col_1のデータ型はVARCHAR(35)ですが、col_2のデータ型はCHAR(35)です。次のステートメントは、2つのテーブルを結合する際に問題を引き起こしました。レコードが返されません。つまり、2つのテーブルを結合できないことを意味します。 col_1は通常8〜11桁で、col_2と同じです。私の理解は、私が "LENGTH(B.col_2)-1"を使用した場合でも、col_1とcol_2の値が同じである限り、末尾のスペースは問題にならないはずです。Teradata - varcharとcharを結合する

この問題の原因は何ですか?

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

ありがとうございます!

+0

Teradataにはトリム機能がありませんか? –

+0

こんにちはダン、はいTeradataはトリムを持っていて、それは私の元の解決策でした。しかし、私の質問は、後ろのスペースは、なぜ後ろのスペースを解消するのが解決策であったのかという理由で参加しても問題ではないからです。私は変更を加えたが、私が振り返ると私は好奇心が強い。 – thatMeow

答えて

1

私はBがcharだと思います。 これは、ここに何が起こるかあなたを説明します:

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

あなたのsubstrは、文字列の実際の長さが、パッド入りの長さを取ることはありませんので、あなたは、元の文字列を取得マイナス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)) 
+0

迅速な対応をありがとう、本当に感謝しています。だから、私はchar2hexintチェックを行いました。たとえば、あるレコードについては、col_1には「3535363130393031」、列2には「3535363130393031352020202020202020202020202020202020」があります。これは何を意味するのでしょうか?ありがとう! – thatMeow

+0

あなたは見ましたか? –

+0

こんにちはDudu、私はあなたが提案したのと同じ解決策を持っていました。しかし、私の質問は:値が等しい限り、charとvarcharを結合するとき、末尾のスペースは重要ではないからです。だから、長さも同じではないので、互いに結合することができるはずです。この問題を引き起こす原因は他にもありますか? – thatMeow

関連する問題