共计 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
替换第一次呈现的 Bar
或 bar
。
SELECT
regexp_replace(
'Bar foobar bar bars',
'Bar',
'foo',
'i'
);
foo foobar bar bars
在上面的例子中,咱们应用了 g
标记,所有呈现的 bar
都被替换为 foo
。请留神,Bar
、BAR
或bAR
不会扭转。
SELECT
regexp_replace(
'Bar sheepbar bar bars barsheep',
'bar',
'foo',
'g'
);
Bar sheepfoo foo foos foosheep
在上面的示例中,咱们同时应用了 g
和 i
标记,因而所有呈现的 bar
或 Bar
、BAR
等都被替换为 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()
用于搜寻子字符串并将其替换为新的子字符串。