PostgreSQL中的SQL Server函数PATINDEX?

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

在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( "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一样工作。你想配什么?`第一个匹配的索引`不表示匹配。什么的第一场比赛?