PostgreSQL 替換字串

Joy Idialu 2023年1月30日 2022年7月18日
  1. 使用 PostgreSQL 中的 replace() 函式替換字串
  2. 在 PostgreSQL 中使用 regexp_replace() 函式替換字串
  3. 更多 PostgreSQL replace() 函式示例
PostgreSQL 替換字串

本教程討論如何使用 PostgreSQL replace() 函式替換字串。

使用 PostgreSQL 中的 replace() 函式替換字串

PostgreSQL replace() 函式具有以下引數,這些引數都是文字型別:

replace (string text, from text, to text)

string 引數是執行 replace() 函式的源文字。from 引數是 string 引數的子字串,表示要更改的部分。

to 參數列示 from 引數要更改為的 string 引數的子字串。

例如,讓我們使用 replace() 函式將單詞 Catfish 更改為 Turtle,如下所示:

SELECT replace ('Catfish', 'Catfish', 'Turtle');

結果是:

 replace
---------
 Turtle

讓我們將 Catfish 中的子字串 Cat 替換為 Jelly,如下所示:

SELECT replace('Catfish', 'Cat', 'Jelly');

結果是:

  replace
-----------
 Jellyfish

此函式還可用於替換字串中的特殊字元。例如,用逗號替換空格,如下所示:

SELECT replace('A B C D E', ' ', ',');

結果是:

  replace
-----------
 A,B,C,D,E

假設我們有一個隨機字元的文字,並且我們想用 b 替換每個出現的字元 a,無論字元 a 是大寫還是小寫。如果我們執行這個命令,如下所示:

SELECT replace('agAdavA', 'a', 'b');

結果是:

 replace
---------
 bgAdbvA

上面顯示的結果不滿足將所有出現的大寫和小寫 a 替換為 b 的要求,因為僅替換了小寫 a 的出現。因此,我們必須引入 PostgreSQL regexp_replace() 函式。

在 PostgreSQL 中使用 regexp_replace() 函式替換字串

PostgreSQL regexp_replace() 函式具有以下引數,這些引數都是文字型別:

regexp_replace (string text, pattern text, replacement text [,flags text])

string 引數是執行替換功能的源字串。pattern 參數列示在字串引數的子字串可以被替換之前必須匹配的正規表示式。

replacement 參數列示我們將字串引數的子字串更改為的文字。flags 參數列示可用於更改 regexp_replace() 函式的行為的文字。

在前面的示例中,我們需要將出現的所有大寫和小寫的 a 更改為 b,我們可以使用 regexp_replace() 函式,如下所示:

SELECT regexp_replace('agAdavA', '[a | A]+', 'b', 'g');

結果是:

 regexp_replace
----------------
 bgbdbvb

隨著正規表示式的引入,所有出現的大寫和小寫 a 都根據需要替換。g 標誌確保替換所有出現的位置,而不僅僅是第一次出現的 a

這是關於模式匹配的 PostgreSQL 文件。

更多 PostgreSQL replace() 函式示例

假設我們有一個表,其中有一個名為 text 的列,由單個單片語成,如下所示:

id text
1 Red
2 Green
3 Blue
4 Red
5 Red

我們想用 Yellow 替換每個出現的單詞 Red。我們可以使用 replace() 函式,如下所示:

UPDATE demo SET text = replace(text, 'Red', 'Yellow');

結果是:

 id |  text
----+--------
  1 | Yellow
  2 | Green
  3 | Blue
  4 | Yellow
  5 | Yellow

假設在同一張表中,我們在 text 欄位中有帶有特殊字元的單詞,如下所示:

id text
6 g-r-e-e-n
7 1-23–4
8 one-and-two
9 —n—2—
10 —–

我們希望將所有出現的連字元 (-) 替換為下劃線 (_)。replace() 函式可以實現這一點,如下所示:

UPDATE demo SET text = replace(text, '-', '_');

結果是:

 id |    text
----+-------------
  6 | g_r_e_e_n
  7 | 1_23__4
  8 | one_and_two
  9 | ___n___2___
 10 | _____

如果我們向表中插入更多記錄,使得 text 欄位包含句子而不是單個單詞,如下所示:

id text
11 She bought a red bag
12 Green is a good color
13 The sky is blue
14 The color of the shirt is red
15 They plan to go with blue or red balloons

我們想用 yellow 替換單詞 red。這可以使用 replace() 函式來實現,如下所示:

UPDATE demo SET text = replace(text, 'red', 'yellow');

結果是:

 id |                     text
----+----------------------------------------------
 11 | She bought a yellow bag
 12 | Green is a good color
 13 | The sky is blue
 14 | The color of the shirt is yellow
 15 | They plan to go with blue or yellow balloons

接下來,以下是要執行的命令:

--CREATE statement
CREATE TABLE demo (
  id INTEGER PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
  text TEXT NOT NULL
);

--insert first set of records
INSERT INTO demo (text)
VALUES
  ('Red'),
  ('Green'),
  ('Blue'),
  ('Red'),
  ('Red');

--insert second set of records
INSERT INTO demo (text)
VALUES
  ('g-r-e-e-n'),
  ('1-23--4'),
  ('one-and-two'),
  ('---n---2---'),
  ('-----');

--insert third and final set of records
INSERT INTO demo (text)
VALUES
  ('She bought a red bag'),
  ('Green is a good color'),
  ('The sky is blue'),
  ('The color of the shirt is red'),
  ('They plan to go with blue or red balloons');

--update statements that include the REPLACE function
UPDATE demo SET text = replace(text, 'Red', 'Yellow');
UPDATE demo SET text = replace(text, '-', '_');
UPDATE demo SET text = replace(text, 'red', 'yellow');

--view all the changes
SELECT * FROM demo;

在本教程中,我們討論瞭如何使用 PostgreSQL replace()regexp_replace 函式替換字串,以及如何使用 replace() 函式更新表中的字串。

相關文章 - PostgreSQL String