PostgreSQL中的SQL Server函数PATINDEX?
在SQL Server中,我执行:PostgreSQL中的SQL Server函数PATINDEX?,postgresql,patindex,Postgresql,Patindex,在SQL Server中,我执行: select PATINDEX('%\%[0123456789][\ ]%', N'\deftab1134\paperw12240\paperh20000\margl900\margt1440\margr540\margb1440\plain\f1\fs24 That is my report'); --- 1 这是正确的。我需要在PostgreSQL中使用相同的函数。 我发现这个函数: CREATE OR REPLACE FUNCTION patindex
select PATINDEX('%\%[0123456789][\ ]%', N'\deftab1134\paperw12240\paperh20000\margl900\margt1440\margr540\margb1440\plain\f1\fs24 That is my report');
---
1
这是正确的。我需要在PostgreSQL中使用相同的函数。
我发现这个函数:
CREATE OR REPLACE FUNCTION patindex( "pattern" TEXT, "expression" TEXT)
RETURNS INT
AS $BODY$
SELECT
COALESCE(
STRPOS(
lower($2)
,(
SELECT
lower(( REGEXP_MATCHES(
lower($2)
,'(' || REPLACE( REPLACE( lower(TRIM( $1, '%' )), '%', '.*?' ), '_', '.' ) || ')'
) )[ 1 ])
LIMIT 1
)
)
,0
)
;
$BODY$ LANGUAGE 'sql' IMMUTABLE;
但它在使用相同参数时工作不正确:
select helper2_patindex('%\%[0123456789][\ ]%',
'\deftab1134\paperw12240\paperh20000\margl900\margt1440\margr540\margb1440\plain\f1\fs24 That is my report');
----
87
什么是不正确的?我能修什么 Postresql具有正则表达式。为什么您需要名为
patindex
?编写与所需内容匹配的正则表达式。%
在正则表达式中不是有效的通配符。我正在将SQL Server db移植到PostgreSQL。patindex返回第一个匹配的索引,我需要这个功能2 a_horse_,名称为:是的,patindex使用的不是RE,而是与LIKE运算符相同的语法。@OLeg如我所说,PostgreSQL有正则表达式。事实上,您复制的代码试图使REGEXP\u匹配
像更有限的PATINDEX一样工作。你想配什么?`第一个匹配的索引`不表示匹配。什么的第一场比赛?