跳到主要内容

REPLACE()

描述

REPLACE() 函数用于替换字符串中的子字符串。这个函数会在 str 中查找所有的 from_str 并将其替换为 to_str。如果 str 中没有找到匹配的 from_str,则原始字符串将保持不变。

  • REPLACE() 中任何参数为 NULL 的情况下,则结果返回 NULL

  • REPLACE() 函数是区分大小写的,这意味着它将考虑字符串的大小写。如果您想进行大小写不敏感的替换,可以使用 REPLACE(UPPER(str), UPPER(from_str), to_str)REPLACE(LOWER(str), LOWER(from_str), to_str) 来确保在不考虑大小写的情况下执行替换。

  • REPLACE() 函数是多字节安全的。

语法

REPLACE(str, from_str, to_str)

参数说明

参数必选/可选说明
str必选原始字符串,要进行替换的目标。
from_str必选要替换的子字符串。
to_str必选替换后的新字符串。

示例

  • 示例 1:下面的查询示例使用 REPLACE 函数将原始字符串中的所有子字符串 abc. 替换为 www
SELECT REPLACE('abc.efg.gpg.nowdew.abc.dabc.e', 'abc.', 'www');

返回结果如下:

+---------------------------------------------------------+
| REPLACE('abc.efg.gpg.nowdew.abc.dabc.e', 'abc.', 'www') |
+---------------------------------------------------------+
| wwwefg.gpg.nowdew.wwwdwwwe |
+---------------------------------------------------------+
1 row in set (0.001 sec)
  • 示例 2:下面的查询示例使用 REPLACE 函数,将原始字符串中的 NULL 替换为 www,由于要替换的子字符串为 NULL,整个表达式的结果将返回 NULL
SELECT REPLACE('abc.efg.gpg.nowdew.abc.dabc.e', NULL, 'www');

返回结果如下:

+-------------------------------------------------------+
| REPLACE('abc.efg.gpg.nowdew.abc.dabc.e', NULL, 'www') |
+-------------------------------------------------------+
| NULL |
+-------------------------------------------------------+
1 row in set (0.001 sec)
  • 示例 3:下面的查询示例使用 REPLACE 函数,将原始字符串中的 abc. 替换为 WWW,由于 REPLACE() 函数区分大小写,整个表达式的结果将返回 WWWefg.gpg.nowdew.WWWdWWWe
SELECT REPLACE('abc.efg.gpg.nowdew.abc.dabc.e', 'abc.', 'WWW');

返回结果如下:

+---------------------------------------------------------+
| REPLACE('abc.efg.gpg.nowdew.abc.dabc.e', 'abc.', 'WWW') |
+---------------------------------------------------------+
| WWWefg.gpg.nowdew.WWWdWWWe |
+---------------------------------------------------------+
1 row in set (0.000 sec)
  • 示例 4:下面的查询示例中,Hello World 会被转换为大写 HELLO WORLD,而 world 也会被转换为大写。因此,这个查询会返回结果 HELLO Universe,因为它将大写的 WORLD 替换为 Universe
SELECT REPLACE(UPPER('Hello World'), UPPER('world'), 'Universe');

返回结果如下:

+-----------------------------------------------------------+
| REPLACE(UPPER('Hello World'), UPPER('world'), 'Universe') |
+-----------------------------------------------------------+
| HELLO Universe |
+-----------------------------------------------------------+
1 row in set (0.001 sec)

MySQL 兼容性

REPLACE() 函数的行为在不同版本中有所差异:在 MySQL 5.7 版本中,当第二个参数为 ''(空字符串),第三个参数为 NULL 时,结果将是第一个参数;而在 MySQL 8.0 版本中,结果将为 NULL。seekdb 兼容 MySQL 8.0 的这种行为。