4

複数の列のすべての( ")を(\")に置き換えるSELECTステートメントを実行したいと思います。どうすればいいですか?

SELECTステートメント内のREPLACE関数で複数の列をターゲットにすることは可能ですか?

私はこれが無効なコードであることを知っていますが、私が何を意味するかを視覚化するためだけです:

SELECT REPLACE(firstColumn, anotherColumn, '"', '\"') 
FROM testTable

もちろん、REPLACE関数は3つのパラメーターのみを想定しているため、これは機能しません

まだ自分に合ったものが見つからなかったので、これについては本当に助けが必要です。

前もって感謝します!

[編集-24.04.2012-16:20UTC+ 01:00]

同様の問題を抱えている可能性がある人のために、これが私の解決策です。正規表現を使用して、次のようなSELECTREPLACEステートメントを作成しました。

Regex: {(^[^, ]+,)}|( {[^, ]+,})|( {[^, ]+$})

これを使用するには、コンマと次のようなスペースで区切られた、通過するすべての列が必要です。

ID, Gender, Firstname, Lastname, Street, Zip, City, EMail, Age,

次に、タグ付きの式(正規表現の{}括弧の間)で置き換えて、次のようなものに置き換えることができるツール(私の場合はVisual Studio)が必要です。

REPLACE(\1\2\3 'replaceMe', 'withMe') AS \1\2\3

これが同様の問題を抱えている可能性のある人に役立つことを願っています。それはおそらく最善の解決策ではありませんが、私にとってはうまくいきました。クイックヘルプをありがとう!

4

2 に答える 2

6

唯一の賢明なオプションは、すべての列で個別に置換を使用することだと思います。

SELECT
    REPLACE(firstColumn, '"', '\"'),
    REPLACE(secondColumn, '"', '\"')
FROM testTable

REPLACEを1回だけ適用するために、データを巧妙にピボットすることもできますが、メリットはわかりません。

実行している実際の置換が非常に複雑な場合は、コードの乱雑さや重複を防ぐために、それを実行する関数を作成できます。

于 2012-04-24T09:19:55.207 に答える
0

多分それはあなたがやろうとしていた以上のもののようですが、次のようなものがうまくいくはずです:

declare 
  qrystart varchar2(15) := 'select replace(';
  qryend varchar2(31) := ', ''"'', ''\"'') from <your_table_name>';
  columnname varchar2(20);
begin 
  for columnItem in (
    select column_name from all_tab_columns
    where lower(table_name) = '<your_table_name>')
  loop
  columnname := columnitem.column_name;
    execute immediate qrystart || columnname || qryend;
  end loop;
end;
/
于 2013-10-24T21:40:59.957 に答える