STUFF
功能描述
Vastbase在SQL Server兼容模式下支持STUFF函数,用于将字符串插入到另一个字符串中,返回值为字符串类型或二进制数据类型。
STUFF函数可以通过指定字符串1的开始位置,删除指定长度的字符串,并将字符串2插入字符串1的开始位。
返回值类型:
如果字符串1是支持的字符串类型之一,则返回字符串类型。
如果字符串1是二进制数据类型之一,则返回二进制数据。
注意事项
该功能仅在数据库兼容模式为SQL Server时支持(即数据库实例初始化时指定DBCOMPATIBILITY='MSSQL')。
如果结果值大于返回类型支持的最大值,则会引发错误。
语法格式
STUFF ( character_expression , start , length , replace_with_expression )
参数说明
character_expression
字符数据的表达式,可以是常量、变量,也可以是字符列或二进制数据列。
start
一个int类型整数值,指定删除和插入的开始位置。
如果 start 为负或为零,则返回空字符串。
如果 start 的长度大于character_expression,则返回空字符串。
length
一个int类型整数,指定要删除的字符长度。
如果length为负,则返回空字符串。
如果length大于character_expression的长度,则最多可以删除到character_expression的最后一个字符。
如果length为零,则插入在start位开始,并且不会删除任何字符。
replace_with_expression
字符数据的表达式。 replace_with_expression可以是常量、变量,也可以是字符列或二进制数据列。
用本replace_with_expression表达式来替换character_expressio从start位开始的length个字符。
若replace_with_expression为NULL,可以在不插入任何内容的情况下删除character_expression表达式从start位开始的length个字符。
示例
示例1: 直接使用STUFF函数。
入参为正常取值。
SELECT STUFF('%AAAAAA%',1,2,'aaaaa');
返回结果为如下:
stuff ------------- aaaaaAAAAA% (1 row)
如果 start 为负或为零,则返回空字符串。
SELECT STUFF('12345',-1,2,'AAA');
返回结果为如下:
stuff ------- (1 row)
如果length为负,则返回空字符串。
SELECT STUFF('%@#$%AAA%',0,-1,'1234567');
返回结果为如下:
stuff ------- (1 row)
如果length大于character_expression的长度,则最多可以删除到character_expression的最后一个字符。
SELECT STUFF('ABDCFEFF',1,10,'1234567');
返回结果为如下:
stuff --------- 1234567 (1 row)
若replace_with_expression为NULL,可以在不插入任何内容的情况下删除character_expression表达式从start位开始的length个字符。
SELECT STUFF('ABDCFEFF',1,3,'');
返回结果为如下:
stuff ------- CFEFF (1 row)
示例2: 在查询测试表语句中使用STUFF函数。
1、创建测试表并插入数据。
create table tt_1163041 (id int unique,context varchar(100));
insert into tt_1163041 values(1,'ensure1122ensure');
2、查询测试表数据。
select * from tt_1163041;
SELECT STUFF('%123%',1,2,context) FROM tt_1163041;
SELECT STUFF('%dfdfewe%',1,200,'aa1223AAAA');
返回结果为如下:
id | context
----+------------------
1 | ensure1122ensure
(1 row)
stuff
---------------------
ensure1122ensure23%
(1 row)
stuff
------------
aa1223AAAA
(1 row)
3、嵌套使用STUFF函数。
SELECT STUFF(STUFF('%123%',1,2,context),2,3,'&&&&&') FROM tt_1163041;
返回结果为如下:
stuff
-----------------------
e&&&&&re1122ensure23%
(1 row)