正規表現の置換 - Redshift regexp_replace

okwaves2024-01-25  7

次のような文字列があります。 '文字列を開始します {これを置き換えます} 文字列を続けます {これも置き換えます} そして念のため、文字列をもう少し続けます' 結果が次のようになる必要があります。 '文字列を開始します % 文字列を続けます % 念のため、文字列をもう少し続けます'

like 演算子を使用した動的 SQL ステートメントで使用するために、開始/終了波括弧の一部またはすべてを % に置き換えようとしています。



------------------------

{replace this} のような文字列を % に置き換えるには、次のような正規表現置換関数を使用できます。

with input(txt) as (
    select 'start the string {replace this} continue the string {replace this too} and for good measure, continue the string some more'::varchar
)
select regexp_replace(txt, '\{[\w\s]*\}', '%') from input;

返品

文字列を開始 % 文字列を継続 % a念のため、文字列をもう少し続けてください

しかし、最初にすべてのテンプレート部分を % に置き換えてから、それに対して LIKE を実行する、前述の 2 段階の検索の代わりに、単に正規表現検索を実行してはどうでしょうか?

with input(txt) as (
    select 'start the string {replace this} continue the string {replace this too} and for good measure, continue the string some more'::varchar
)
select txt from input
where
txt ~ 'start the string \{.*\} continue the string \{.*\} and for good measure, continue the string some more'
 

3

botchniaque さん、ありがとうございます。これは面白そうですが、問題の詳細に適用するのが難しいので、もう少し詳しく説明します。テーブル FOO には「20202/01/01 に花を買ってくれてありがとうビリー」というテキストがあり、テーブル BAR にはテンプレート付きのテキスト テンプレートがありますte_id 1 と '{firstname} さん、{date} に {item} をご購入いただきありがとうございます'そして、FOO からのテキストが BAR に参加して template_id 1 を取得できるようにする必要があります。私が単に混乱を招いたのかどうかはわかりませんが、あなたの提案に従って作業を進めさせていただきます。もう一度、よろしくお願いします!

– ポール・コルバーニ

2020 年 9 月 8 日 21:16

あなたのガイダンスを使用して、自分のユースケースに適用して機能させることができました。本当にありがとう。少し整理したらソリューションを投稿します。

– ポール・コルバーニ

2020 年 9 月 8 日 23:52

回答が役に立った場合は、承認済みとしてマークすることを検討してください:)

– ボッチニアク

2020 年 9 月 10 日 10:36

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。