2016-08-29 32 views
1

数値データをvarcharにプレーンで挿入すると、私はまったく実行しません フィールドなぜそれを2スペースで左パッドしますか。 varcharはスペースを取り除くことになっていません(大丈夫です...しかしスペースは "フロントパッド"というルールがどこにありますか)。あなたは2 spaces aka ' 'Teradata SQL VARCHARと空白

第二の質問のために20202020ヘックスの上に表示された場合はなぜ、ここ2、先頭のスペース

INSERT INTO v VALUES (,1243444,3455435,8768810,'fdff',5,7,8,,) 

とパッド(,1243444,3455435,8768810,'fdff',5,7,8,,)(someirrelvant_datatype,varchar(x),varchar(y),varchar(z),char(5),smallint,int,int,Timestamp)

あるので、データには、この

SEL  CHAR2HEXINT (colA) ,colA FROM v 


313732353732 172572 /* this is some other pre-existing value*/ 
2020202033343535343335  3455435 /* this is value just inserted */ 

のように見えます(上記状況の継続ではない)
ここでは、この

HMSA 
232434343 
HMSA 
4343434343 
434343434 

HMSAなどのはまた、私はvarchar型のデータを持っている(50)colが末尾のスペース2020 HEXを持っていますが、他の値はtrailing spacesを持っていません。何が起こっているかわからない。今ここでは末尾のスペースをすべて捨てるとは思わないでしょうか?どのようにデータが到着するのかHMSA<space> わかりません。何か案は ?

[OK]をので、このから来るいくつかの奇妙を見てみましょう:

insert ('yada ') into tb /* tb is volatile & SET.There are 4 spaces */ 
insert ('yada') into tb 

Query Failed. 2802: Duplicate row error in tb 

よしは2日だから、これは

どのように見えるか
7961646120202020 yada /*There are 4 spaces - 20 x 4 */ 

を見て、それは宇宙の比較部をオフに投げ挿入し、でしたtrim(oldvalue) vs trim (new value)

答えて

3

Q1:SELECT FORMAT(3455435), TYPE(3455435)を実行すると、

すべてのデータ型には、常に文字列との間のキャストに使用されるCobol形式の形式があります。あなたのケースでは、ソースとターゲットのデータ型が一致せず、Teradataは自動型キャストを行いました。整数の書式は10桁までで、先頭に、右端にという先頭の記号が追加されています。

標準SQLを使用するExplixit型キャストCASTは、フォーマットを適用せず、先頭のスペースを使用しません。だから、単にCAST(3455435 AS VARCHAR(20)または(TRIM(3455435)を行う代わりに `

Q2:varchar型の店舗あなたは挿入まさに、すなわち'1234 'は二つのスペースを含む、保存された文字列を比較する際に無視されている末尾のスペースを標準SQLの比較規則に基づいて行われます。したがって、'yada ''yada'は等しいと見なされます(この場合、標準SQLに従わない場合は、Oracleと一緒に作業している可能性があります)。

+0

ありがとうございました...いつものようにDieterは説明が素晴らしく、 db世界で起こっている多くの一般的な事柄です。多くの人がこの貴重なq& – user1874594