Oracle REPLACE() 関数がキャリッジリターンとラインフィードを処理しない

あるテーブルの varchar2(100) カラムには、改行文字が含まれていることがあります。SQLクエリでこれらの文字を削除したい。私たちは、以下のものを使用しています。

REPLACE( col_name, CHR(10) ) 

を使っていますが、 'CHR(10)' をより一般的な 'letter' に置き換えると、REPLACE 関数は別の方法で動作することが証明されます。また、次のこともわかりました。

REPLACE( col_name, CHR(10), '_' ) 

は改行の 位置 を見つけますが、アンダースコアを置き換えるのではなく、その後に 挿入 します。

Oracle8iで動作しています。アップグレードはオプションではありません。

ソリューション

別の方法は、翻訳を使用することです。

TRANSLATE (col_name, 'x'||CHR(10)||CHR(13), 'x')

3番目のパラメーターがnullの場合、TRANSLATEは正しく機能しないため、「x」はnullに変換したくない任意の文字です。

解説 (3)

嗚呼、ケイドは金になる。

TOADのアーティファクトは rrn を2つのプレースホルダー 'blob' 文字として印刷するが、1つの rr も2つのプレースホルダーとして印刷される。解決への第1歩は、.NET Frameworkを使用することです。

REPLACE( col_name, CHR(13) || CHR(10) )

を使うことですが、私はもう少し堅牢な.

REPLACE(REPLACE( col_name, CHR(10) ), CHR(13) )

これはどのような順序でも違反文字を捕らえることができます。Cadeに感謝します。

M.

解説 (1)

改行が「CHR(13) + CHR(10)」 でないことは確かですか?その場合、「CHR(13) + '_' 」となり、まだ改行のように見えるかもしれません。

REPLACE(col_name, CHR(13) + CHR(10), '')` を試してみてください。

解説 (1)

データベース内のデータがHTMLフォームのTextAreaコントロールからPOSTされた場合、ブラウザによって異なる改行文字が使用されます。

FirefoxはCHR(10)のみで行を区切ります。

Internet ExplorerはCHR(13)とCHR(10)で行を区切ります。

Apple (OSX以前) はCHR(13)のみで行を区切ります。

というようなものが必要になるかもしれません。

set col_name = replace(replace(col_name, CHR(13), ''), CHR(10), '')
解説 (0)

メモを落としたかっただけです。 独自の心を持つテキスト4000フィールドのフォーマットに問題があり、テキストはレポートでランダムにラップ(またはラップ)されているように見えました。 上記の置換chr(10)を使用して列を更新したとき。 私のレポートは、ようやく好きなようにフォーマットされました。 多くのThanx。!

解説 (0)

改行文字が「CRLF」の場合、それは「CHR(13)」の後に「CHR(10)」が続くことを意味します。 REPLACE(入力、CHR(10)、 '_')の場合、 CHR(13)に変わり、その後にアンダースコアが続きます。 CR自体は改行文字と同じようにレンダリングできるため、改行後にアンダースコアが挿入されたかのように表示されますが、実際には改行の半分しか置き換えられていません。

REPLACE(REPLACE(input、CHR(13))、CHR(10))を使用して、すべての CRLFを置き換えます。

解説 (0)