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)