2016-09-07 29 views
0

ETLツールであるTalendを使用して、あるNetezzaデータベースから別のNetezzaデータベースにデータを転送しています。 varchar(30)フィールドからデータを取り出し、新しいデータベースのvarchar(30)フィールドに入れようとすると、長すぎるというエラーが表示されます。ログには、最後に空白があり、正方形が現れていることがわかります。私は理解できない文字を表しています。以下のログのスクリーンショットを添付しました。私はこのフィールドを引き出し、私がCRLFだと思ったものを置き換えるためにSQLを書こうとしましたが、運はありません。フィールドを選択して長さを取得すると、表示される文字よりもいくつか余分な文字があるので、何かがあり、それを取り除きたい。トリミングは何もしません。Netezzaカラムで特殊文字を取り除く方法

このSQLは、列自体に対して単にlength()を実行するよりも短い長さを返しません。誰が他に何ができるか知っていますか?

SELECT LENGTH(trim(translate(TRANSLATE(<column>, chr(13), ''), chr(10), ''))) as len_modified 

Snapshot of the logs

(注)カッコ内の広場を見たログの最後の列は、最後の文字検討を表示することになっていること。

答えて

1

動作するより大きなターゲットテーブルサイズにデータを保存します。 30文字のデータが500文字の表に置かれている場合。それを働かせてください。次に、どの文字が追加されているかを判断するために最も長いフィールド上の文字を調べます。 ascii()のようなコマンドを使用して、個々の文字のASCII値と開始と終了を判断します。ほとんどの場合、最初または最後に追加の文字が追加されている可能性があります。余分な文字データが何であるかを判断し、30文字の文字列に収まるようにコードを削除したり、コードをロードしたりしないでください。または、ターゲット列を長くしておき、追加の文字を含めるだけです。たとえば、Varchar(30)はVarchar(32)になります(スペースを無駄にしますが、データが変更されることはありません)。

+0

あなたの提案は、それが非破壊空間、ユニコード値160だったことに気づいたのでした。私は、29番目のインデックス(substring関数を使用)の文字を使用して列のascii関数を実行しました。私はそれをtranslate関数とchr(160)を使って削除することができました。ありがとう!! – Kelly

+0

問題はありませんこの同じ問題を20回以上経験しました。これは今まで私のために毎回働いていた私の解決策でした。他の文字のリストがあり、それらの多くは目に見えないように見えますが、あなたはこの問題を潜在的に見るでしょう。 –

関連する問題