0

在 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

什么是不正确的?我能解决什么问题?

4

0 回答 0