我需要Postgres等效的SQL函数patindex
答案 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