8

約 10,000 のレコードを持つデータベースがあり、その中には置換したい HTML 文字が含まれているものがあります。

たとえば、すべての出現箇所を見つけることができます:

SELECT * FROM TABLE
WHERE TEXTFIELD LIKE '%&#47%'

元の文字列の例:

this is the cool mega string that contains &#47

&#47すべてをに置き換える方法は/?

最終結果は次のようになります。

this is the cool mega string that contains /

4

3 に答える 3

22

特定の文字列を別の文字列またはその文字列の変換に置き換えたい場合は、postgresql の "replace" 関数を使用できます。たとえば、「myfield」列のすべての「cat」を「dog」に置き換えるには、次のようにします。

UPDATE tablename
SET myfield = replace(myfield,"cat", "dog")

必要に応じて、WHERE 句またはその他のロジックを追加できます。

あるいは、HTML エンティティ、ASCII 文字、またはさまざまなエンコーディング スキーム間で変換しようとしている場合、postgre にはそのための関数もあります。 Postgresql 文字列関数.

于 2012-06-12T02:07:14.667 に答える
4

@davesnitty の回答は機能しますが、置換するテキスト パターンが、変更したくない長いパターンに埋め込まれているように見えるかどうかを慎重に検討する必要があります。そうしないと、誰かが火をつけていることに気付くでしょう。それは奇妙なことです。

可能であれば、エスケープ解除するものに適した専用ツールを使用してください。URL エンコードされたテキストを取得しましたか? URL デコーダーを使用します。XML エンティティを取得しましたか? テキスト モード出力で XSLT スタイルシートを介してそれらを処理します。上記のように、これらは通常、検索と置換でハッキングするよりもデータにとって安全です。

正規表現を使用したい場合があります。それらはすべての問題に対する普遍的な解決策ではありませんが、一部のジョブでは非常に便利です。

「/」のすべてのインスタンスを無条件に「/」に置き換えたい場合、正規表現は必要ありません。

「/」を置き換えたいが「Ǘ」は置き換えたくない場合は、正規表現が必要になる場合があります。これは、単語全体のみに一致する、さまざまなパターンに一致する、数字の最小/最大ランを指定するなどのことができるためです。

PostgreSQL 文字列関数と演算子のドキュメントには、ステートメントregexp_replace中に正規表現を適用できる関数があります。UPDATE

もっと多くのことを言うには、実際のデータが何であり、実際に何をしようとしているのかを知る必要があります.

于 2012-06-12T05:48:45.313 に答える