VastbaseG100

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

Menu

PATINDEX

功能描述

Vastbase在SQL Server兼容模式下支持PATINDEX函数,用于返回要查询的内容在指定表达式中第一次出现的起始位置,返回值为int类型。

  • 函数返回的位置从1开始。

  • 如果在所有有效的文本和字符数据类型中都找不到该内容,则返回零。

  • 要查询的内容(pattern)和表达式(expression)任意值为null时,函数返回null。

注意事项

该功能仅在数据库兼容模式为SQL Server时支持(即数据库实例初始化时指定DBCOMPATIBILITY='MSSQL')。

语法格式

PATINDEX ( '%pattern%' , expression )  

参数说明

  • pattern

    包含要查找的序列的字符表达式。可以使用通配符,但 pattern之前和之后必须有% 字符(搜索第一个或最后一个字符时除外)。 pattern是字符串数据类型类别的表达式。 pattern最多包含8000个字符。

  • expression

    一个表达式,通常是针对指定pattern搜索的列。 expression是字符串数据类型类别的表达式。

示例

示例1: PATINDEX函数匹配字段。

1、创建测试表并插入数据。

create table tt_1162110 (id int unique,context varchar(100));
insert into tt_1162110 values(1,'ensure1122ensure');
insert into tt_1162110 values(2,'%*ensure1122ensure');
insert into tt_1162110 values(3,'Ple3ase34 ensure the door is locked!');
insert into tt_1162110 values(4,'Ple3ase34 ensure the door is locked!');

2、使用PANINDEX函数查询数据。

SELECT PATINDEX('%ensure%',context) FROM tt_1162110;

查询结果为如下:

 patindex
----------
        1
        3
       11
       11
(4 rows)

3、向测试表中插入中文字符串。

insert into tt_1162110 values(5,'这是一个测试例子!!!测试123计划测试用例!%%%%%***');
insert into tt_1162110 values(6,'这是一个测试例子!!!测试计划测试用例!%%*测%2E%e试%%%***');

4、使用PANINDEX函数查询数据。

SELECT PATINDEX('%测试122%', context)from tt_1162110 ;
SELECT PATINDEX('%测%2E%e试%', context) from tt_1162110 ;

返回结果为如下:

 patindex
----------
        0
        0
        0
        0
        0
        0
(6 rows)

 patindex
----------
        0
        0
        0
        0
        0
        5
(6 rows)

示例2: 在存储过程的出入参中使用PATINDEX函数。

1、创建存储过程。

create or replace procedure pro_1162367(a in varchar(2000),b inout varchar(2000),c out varchar(2000))
as
begin
b:= PATINDEX('%'+a+'%', 'inTEresting ddTERd');
c:= PATINDEX('%'+b+'%', '这是一个测试例子!!!测试01234567计划测试用例!%%%%%***');
end;
/

2、调用存储过程。

call pro_1162367('inTEresting ddTERd','inTEresting ddTERd','这是一个测试例子!!!测试01234567计划测试用例!%%%%%***');

结果返回如下:

 b | c
---+----
 1 | 15
(1 row)