关于postgresql:PostgreSQL-查找替换函数

8次阅读

共计 2920 个字符,预计需要花费 8 分钟才能阅读完成。

概要: 在本教程中,咱们将向您介绍 PostgreSQL 替换函数,这些函数在字符串中搜寻子字符串并将其替换为新的子字符串。

PostgreSQL REPLACE 函数

有时,您想搜寻列中的字符串并将其替换为新字符串,例如替换过期的电话号码、损坏的 URL 和拼写错误。

要搜寻字符串的所有匹配项并将其替换为新字符串,请应用 REPLACE() 函数。

上面阐明了 PostgreSQL REPLACE() 函数的语法:

REPLACE(source, old_text, new_text);

REPLACE() 函数承受三个参数:

  • source 是一个你想要替换的字符串。
  • old_text 是您要搜寻和替换的文本。如果 old_text 在字符串中屡次呈现,它的所有呈现都将被替换。
  • new_text 是将替换旧文本 (old_text) 的新文本。

PostgreSQL REPLACE() 函数示例

请参阅以下应用“REPLACE()”函数的示例:

SELECT
    REPLACE ('ABC AA', 'A', 'Z');

在此示例中,咱们将字符串中的所有字符“A”替换为字符“Z”。

以下示例将 URL 中的子字符串“tt”替换为“xx”:

SELECT
    REPLACE (
        'https://www.zhaoxinsoft.com',
        'tt',
        'xx'
    );

如果要搜寻和替换表列中的子字符串,请应用以下语法:

UPDATE 
   table_name
SET 
   column_name = REPLACE(column,old_text,new_text)
WHERE 
   condition

让咱们应用示例数据库中的 customer 表进行演示:

SELECT
    first_name,
    last_name,
    email
FROM
    customer;

当初,假如您想更新电子邮件列以用 zhaoxinsoft.com 替换域 sakilacustomer.org,请应用以下语句:

UPDATE 
   customer
SET 
   email = REPLACE (
      email,
    'sakilacustomer.org',
    'zhaoxinsoft.com'
   );

因为咱们省略了 WHERE 子句,所以更新了 customer 表中的所有行。

让咱们验证是否产生了替换。

SELECT
    first_name,
    last_name,
    email
FROM
    customer;

PostgreSQL REGEXP_REPLACE 函数

如果您须要更高级的匹配形式,您能够应用REGEXP_REPLACE() 函数。

REGEXP_REPLACE() 函数容许您替换与正则表达式匹配的子字符串。上面阐明了REGEX_REPLACE() 函数的语法。

REGEXP_REPLACE(source, pattern, new_text [,flags])

REGEXP_REPLACE() 函数承受四个参数:

  • source 是您将查找与 pattern 匹配的子字符串并将其替换为 new_text 的字符串。如果未找到匹配项,则源放弃不变。
  • pattern 是一个正则表达式。它能够是任何模式,例如:电子邮件、URL、电话号码等。
  • next_text 是替换子字符串的文本。
  • flags 蕴含零个或多个单字母标记,用于管制 REGEX_REPLACE() 函数的行为。例如,i 示意不辨别大小写匹配或疏忽大小写。g 代表全局;如果应用 g 标记,该函数将替换所有匹配模式的子字符串呈现。flags 参数是可选的。

PostgreSQL REGEXP_REPLACE() 函数示例

须要致力和试验能力了解REGEXP_REPLACE() 函数的工作原理。

以下是应用“REGEXP_REPLACE()”函数的示例。

SELECT
    regexp_replace(
        'foo bar foobar barfoo',
        'foo',
        'bar'
    );
bar bar foobar barfoo

在上面的例子中,因为咱们应用了 i 标记,它会疏忽大小写并用 foo 替换第一次呈现的 Barbar

SELECT
    regexp_replace(
        'Bar foobar bar bars',
        'Bar',
        'foo',
        'i'
    );
foo foobar bar bars

在上面的例子中,咱们应用了 g 标记,所有呈现的 bar 都被替换为 foo。请留神,BarBARbAR 不会扭转。

SELECT
    regexp_replace(
        'Bar sheepbar bar bars barsheep',
        'bar',
        'foo',
        'g'
    );
Bar sheepfoo foo foos foosheep

在上面的示例中,咱们同时应用了 gi 标记,因而所有呈现的 barBarBAR 等都被替换为 foo

SELECT
    regexp_replace(
        'Bar sheepbar bar bars barsheep',
        'bar',
        'foo',
        'gi'
    );
foo sheepfoo foo foos foosheep

\m 示意只匹配每个单词的结尾。在任何状况下,所有以 bar 结尾的单词都被 foo 替换。以 bar 结尾的单词没有扭转。

SELECT
    regexp_replace(
        'Bar sheepbar bar bars barsheep',
        '\mbar',
        'foo',
        'gi'
    );
foo sheepbar foo foos foosheep

\M 示意仅在每个单词的开端匹配。所有以“bar”结尾的单词都被 foo 代替。以 bar 结尾的词不会被替换。

SELECT
    regexp_replace(
        'Bar sheepbar bar bars barsheep',
        'bar\M',
        'foo',
        'gi'
    );
foo sheepfoo foo bars barsheep

\m\M 示意在每个单词的结尾和结尾都匹配。在任何状况下,所有以 bar 结尾和结尾的单词都被替换为 foo

SELECT
    regexp_replace(
        'Bar sheepbar bar bars barsheep',
        '\mbar\M',
        'foo',
        'gi'
    );
foo sheepbar foo bars barsheep

PostgreSQL TRANSLATE 函数

除了REPLACE()REGEXP_REPLACE() 函数,PostgreSQL 还提供了另一个名为TRANSLATE() 的函数用于字符串替换。

给定一个 set 字符,TRANSLATE()函数用 new_set 中的字符替换 source 字符串中匹配 set 的任何字符。

TRANSLATE(source, set, new_set);

The TRANSLATE() function accepts three parameters:

  • source 是您要搜寻和替换的字符串。
  • set 是一组用于匹配的字符。
  • new_set 是一组字符,用于替换与 set 匹配的字符。

请留神,如果 set 的字符比 new_set 多,PostgreSQL 会从 source 字符串中删除 set 中多余的字符。

PostgreSQL TRANSLATE 函数示例

在以下示例中,咱们将所有非凡元音转换为失常元音。

SELECT
    TRANSLATE (
        'LÒ BÓ VÔ XÕ',
        'ÒÓÔÕ',
        'OOOO'
    );
LO BO VO XO

请看下图。

在本教程中,咱们向您展现了各种函数:REPLACE()REGEXP_REPLACE()TRANSLATE() 用于搜寻子字符串并将其替换为新的子字符串。

正文完
 0