PostgreSQL

时间:2017-05-11 11:51:33

标签: sql postgresql patindex

我需要Postgres等效的SQL函数patindex

1 个答案:

答案 0 :(得分:2)

没有完全等同于SQL Server的PATINDEX函数。您可以根据需要使用其他字符串函数。以下是文档:https://www.postgresql.org/docs/current/static/functions-string.html

但是如果你需要完全相同的功能,你可以编写一个“包装器”,如下所示:

CREATE OR REPLACE FUNCTION "patindex"( "pattern" VARCHAR, "expression" VARCHAR ) RETURNS INT AS $BODY$
SELECT
    COALESCE(
        STRPOS(
             $2
            ,(
                SELECT
                    ( REGEXP_MATCHES(
                        $2
                        ,'(' || REPLACE( REPLACE( TRIM( $1, '%' ), '%', '.*?' ), '_', '.' ) || ')'
                        ,'i'
                    ) )[ 1 ]
                LIMIT 1
            )
        )
        ,0
    )
;
$BODY$ LANGUAGE 'sql' IMMUTABLE;

示例:

SELECT patindex( '%e_t%', 'Test String' );
  

2

SELECT patindex( '%S_r%', 'Test String' );
  

6

SELECT patindex( '%x%', 'Test String' );
  

0