PostgreSQL 教程: replace 字符串替换函数

九月 2, 2023

摘要:在本教程中,我们将向您介绍 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()函数的示例。

1) 基本 REPLACE 函数示例

请查看以下使用REPLACE()函数的示例:

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

输出:

 replace
---------
 ZBC ZZ
(1 row)

在此示例中,我们将字符串中的所有字符 ‘A’ 替换为字符 ‘Z’。

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

SELECT
	REPLACE (
		'https://www.rockdata.net',
		'tt',
		'xx'
	);

输出:

         replace
--------------------------
 hxxps://www.rockdata.net
(1 row)

2) 将 PostgreSQL REPLACE 函数用于表数据

如果要搜索并替换表列中的子字符串,请使用以下语法:

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

我们使用示例数据库中的customer表进行演示:

SELECT
	first_name,
	last_name,
	email
FROM
	customer;

输出:

 first_name  |  last_name   |                  email
-------------+--------------+------------------------------------------
 Jared       | Ely          | jared.ely@sakilacustomer.org
 Mary        | Smith        | mary.smith@sakilacustomer.org
 Patricia    | Johnson      | patricia.johnson@sakilacustomer.org
 Linda       | Williams     | linda.williams@sakilacustomer.org
 Barbara     | Jones        | barbara.jones@sakilacustomer.org
 Elizabeth   | Brown        | elizabeth.brown@sakilacustomer.org
 Jennifer    | Davis        | jennifer.davis@sakilacustomer.org
 Maria       | Miller       | maria.miller@sakilacustomer.org
 Susan       | Wilson       | susan.wilson@sakilacustomer.org
 ...

现在,假设您要更新电子邮件列以将域名sakilacustomer.org替换为rockdata.net,请使用以下语句:

UPDATE 
   customer
SET 
   email = REPLACE (
  	email,
	'sakilacustomer.org',
	'rockdata.net'
   );

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

让我们验证一下是否已进行替换。

SELECT
	first_name,
	last_name,
	email
FROM
	customer;

输出:

 first_name  |  last_name   |               email
-------------+--------------+------------------------------------
 Jared       | Ely          | jared.ely@rockdata.net
 Mary        | Smith        | mary.smith@rockdata.net
 Patricia    | Johnson      | patricia.johnson@rockdata.net
 Linda       | Williams     | linda.williams@rockdata.net
 Barbara     | Jones        | barbara.jones@rockdata.net
 Elizabeth   | Brown        | elizabeth.brown@rockdata.net
 Jennifer    | Davis        | jennifer.davis@rockdata.net
 Maria       | Miller       | maria.miller@rockdata.net
 Susan       | Wilson       | susan.wilson@rockdata.net
 ...

在本教程中,我们向您展示了REPLACE()字符串替换函数,搜索子字符串并将其替换为新子字符串。

了解更多

PostgreSQL 教程:字符串函数

PostgreSQL 文档:字符串函数和操作符

regexp_replace(), translate()