REPLACE (Transact-SQL)

适用于: SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics 分析平台系统 (PDW) Microsoft Fabric 中的 SQL 分析端点 Microsoft Fabric 中的仓库

将出现的所有指定字符串值替换为另一个字符串值。

Transact-SQL 语法约定

语法

REPLACE ( string_expression , string_pattern , string_replacement )  

参数

string_expression
是要搜索的字符串表达式。 string_expression 可以是字符或二进制数据类型 。

string_pattern
是要查找的子字符串。 string_pattern 可以是字符或二进制数据类型 。 string_pattern 不得超过页面可容纳的最大字节数。 如果 string_pattern 为空字符串 (""),则 string_expression 会按原样返回。

string_replacement
是替换字符串。 string_replacement 可以是字符或二进制数据类型 。

返回类型

如果其中的一个输入参数数据类型为 nvarchar,则返回 nvarchar;否则 REPLACE 返回 varchar 。

如果任何一个参数为 NULL,则返回 NULL。

如果 string_expression 的类型不是 varchar(max) 或 nvarchar(max),则 REPLACE 将返回值截断为 8000 个字节 。 若要返回大于 8,000 字节的值,则必须将 string_expression 显式转换为大值数据类型 。

备注

REPLACE 根据输入的排序规则执行比较操作。 若要以指定排序规则进行比较,则可以使用 COLLATE 将显式排序规则应用于输入。

0x0000 (char(0)) 是 Windows 排序规则中未定义的字符,不能包括在 REPLACE 中 。

示例

以下示例使用 cde 替换 abcdefghicde 中的字符串 xxx

SELECT REPLACE('abcdefghicde','cde','xxx');  
GO  

结果集如下。

------------  
abxxxfghixxx  
(1 row(s) affected)  

下面的示例使用 COLLATE 函数。

SELECT REPLACE('This is a Test'  COLLATE Latin1_General_BIN,  
'Test', 'desk' );  
GO  

结果集如下。

------------  
This is a desk  
(1 row(s) affected)  

下面的示例使用 REPLACE 函数计算句子中的空格数。 首先,它使用 LEN 函数计算句子长度。 然后使用 REPLACE 将“ ”字符替换为“”。 完成此过程后,它会再次计算句子长度。 产生的差异即句子中的空格字符数。

DECLARE @STR NVARCHAR(100), @LEN1 INT, @LEN2 INT;
SET @STR = N'This is a sentence with spaces in it.';
SET @LEN1 = LEN(@STR);
SET @STR = REPLACE(@STR, N' ', N'');
SET @LEN2 = LEN(@STR);
SELECT N'Number of spaces in the string: ' + CONVERT(NVARCHAR(20), @LEN1 - @LEN2);

GO  

结果集如下。

------------  
Number of spaces in the sentence: 7  

(1 row(s) affected)  

另请参阅

CONCAT (Transact-SQL)
CONCAT_WS (Transact-SQL)
FORMATMESSAGE (Transact-SQL)
QUOTENAME (Transact-SQL)
REVERSE (Transact-SQL)
STRING_AGG (Transact-SQL)
STRING_ESCAPE (Transact-SQL)
STUFF (Transact-SQL)
TRANSLATE (Transact-SQL)
数据类型 (Transact-SQL)
字符串函数 (Transact-SQL)