2017-05-11 86 views
2

我需要的Postgres相当于SQL函数patindexSQL PATINDEX等同于PostgreSQL的

+3

的Postgres提供了完整的支持正则表达式。它比SQL Server的'patindex()'更强大,更标准。 –

+0

没有直接等同于'patindex'(尽管可以很容易地编写它)。但是,如果您向我们展示原始查询,可能在Postgres中有更好的选择(正如Gordon所说:Postgres的正则表达式支持比SQL Server的更复杂) –

+0

我想要一个带有SQL名称和功能的Postgres函数“ Patindex“功能。我正在将SQL查询转换为Postgres等效的,所以如果我在SQl中遇到Patindex中的函数,我希望在Postgres中也可以使用相同的函数 – Priya

回答

1

的没有完全等效于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, '%'), '%', '.*?'), '_', '.') || ')' 
        ))[ 1 ] 
       LIMIT 1 
      ) 
     ) 
     ,0 
    ) 
; 
$BODY$ LANGUAGE 'sql' IMMUTABLE; 

例子:

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