web-dev-qa-db-ja.com

regexp_replace()とreplace()は、文字列内のすべての一致を置き換えます

デフォルトでは、PostgreSQLでは regexp_replace() は文字列内のfirstの部分文字列を置き換えますが、 replace()は、文字列内の部分文字列のallオカレンスを置き換えます。デフォルトの動作が異なるのはなぜですか?

regexp_replacegオプションを使用して、文字列内のすべての部分文字列を置き換えることができます。)

例:

SELECT regexp_replace('hello world', 'o', 'z');  -- returns "hellz world"
SELECT regexp_replace('hello world', 'o', 'z', 'g'); -- returns "hellz wzrld"
SELECT replace('hello world', 'o', 'z'); -- returns: "hellz wzrld"
3

どうして?

Postgres replace() は、他のRDBMSと同じように機能する標準SQL関数であるためです。例: replace() in SQL Server:

指定された文字列値のすべての出現箇所を別の文字列値で置き換えます。

regexp_replace() は...

POSIX正規表現に一致する部分文字列を置き換えます。

正規表現 の処理は、明らかにPOSIX標準によってガイドされ、それを実装する他のツールと同じように機能します。 マニュアル:

POSIX正規表現は、LIKEおよびSIMILAR TO演算子よりも強力なパターンマッチング手段を提供します。 egrepsedawkなどの多くのUnixツールは、ここで説明されているものと同様のパターンマッチング言語を使用します。

6