2017-07-20 28 views
0

フリーテキストフィールドから日付を抽出しようとしています(私たちのプロセスは\のように素晴らしいので、\)、Teradataエラー6706を叩いています。私が使用している正規表現はREGEXP_SUBSTR(original_field,'(\d{2})\/(\d{2})\/(\d{4})',1) AS new_fieldです。私はフィールドの型がわからないHELP TABLEフィールドの型の列に空白があります。文字列から日付を抽出するときの変換不可能な文字

私はすでにTRANSLATE(col USING LATIN_TO_UNICODE)UNICODE_TO_LATINを使用して変換を試していますが、実際には両方とも実際にエラーが発生します。ストレートのCAST(original_field AS VARCHAR(255))では問題は解決されませんが、キャストは機能します。私はまた、REGEXP_SUBSTRにそれ自身でも、すでに言及したキャスト&翻訳でもクラックさせる前に、フィールドからさまざまな特殊文字(改行、改行など)を取り除くことを試みました。

この時点では、問題の内容がわからないため、追加オプションについてのガイダンスを使用して試すことができます。働い

+0

regexp_replaceを使用して、英数字以外の文字をすべて削除してみましたか?本当にフリーのテキストフィールドにどのようなゴミが残っているのかは分かりません。 – Andrew

+0

私は一連の 'OREPLACE'を行った。 'REGEXP_REPLACE'は' [\ r \ t \ n \ e \ f] ''を使ったときと同じエラーが発生しました。なぜOREPLACEと16進コードを使ったのですか? – JMichael

+0

REGEXP_INSTRを使用して、変換可能な範囲外の値を含むレコードを検索しようとしましたか?ビューに対して実行していますか? –

答えて

0

最終版はTRANSLATEが問題を引き起こしているようだTRIM内部で使用して、何らかの理由で

, CASE 
    WHEN TRANSLATE_CHK(field USING LATIN_TO_UNICODE) = 0 THEN 
     REGEXP_SUBSTR(TRANSLATE(field USING LATIN_TO_UNICODE),'(\d{2})\/(\d{2})\/(\d{4})',1) 
    ELSE NULL 
END AS Ref_Date 

をことになりました。一度だけ私はTRANSLATEの内部からすべての機能をストライプ化し、TRANSLATE、したがってREGEXP_SUBSTRを実行しました。

+0

' CHAR2HEXINT(field) 'を使って実際に何が悪いデータに含まれているのかを調べるかもしれません。おそらく16進数「1A」、https://stackoverflow.com/q/40138725 – dnoeth

+0

を参照してください。別の方法で見つけました。 ASCII char#26(バックスペース)でした。 – JMichael

+0

さて、ヘキサ '1A'は十進の' 26'と同じです:-) – dnoeth

関連する問題