VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

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)